如何解决如何创建一个装饰器来装饰生成器函数?
我需要创建一个装饰器函数来装饰一个生成器函数。生成器函数产生问题 #'s 作为装饰添加。装饰器需要接受一个引用函数的参数。包装器需要返回一个格式化的字符串,即提示“问题#:”,其中# 将是在生成器对象上调用 next 所产生的数字。
我知道我的代码不正确,但我不知道如何修复它或从哪里开始。任何帮助将不胜感激
这是我目前拥有的:
df = pd.DataFrame({
'Open': [1,1.1,0.9,0.9],'High': [1.2,1.2,1.3],'Low': [1,1.0,0.8,0.7],'Close': [1.1,1.2]
})
df
# Open High Low Close
# 0 1.0 1.2 1.0 1.1
# 1 1.1 1.2 1.0 1.2
# 2 0.9 1.1 0.8 0.8
# 3 0.9 1.3 0.7 1.2
min = df.min().min() # df['Low'].min()
max = df.max().max() # df['High'].max()
norm = (df - min) / (max - min)
norm
# Open High Low Close
# 0 0.500000 0.833333 0.500000 0.666667
# 1 0.666667 0.833333 0.500000 0.833333
# 2 0.333333 0.666667 0.166667 0.166667
# 3 0.333333 1.000000 0.000000 0.833333
解决方法
如果您有一个简单的生成器,它会产生以下问题:
def someF():
yield from [
'Name a color','Name an animal','Name a country'
]
然后你可以用一个装饰器将它包装起来,这样它就会遍历生成器并添加你想要的细节。如果您产生 input()
的结果,您可以像任何其他生成器一样捕获输入:
from functools import wraps
def gen(f):
@wraps(f)
def inner(*args,**kwargs):
g = f(*args,**kwargs)
for num,question in enumerate(g):
yield input(f'question #{num}: {question}: ')
return inner
@gen
def someF():
yield from [
'Name a color','Name a country'
]
g = someF()
list(g)
使用它看起来像:
> question #0: Name a color: Blue
> question #1: Name an animal: Dog
> question #2: Name a country: Bolivia
['Blue','Dog','Bolivia']
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。