我需要创建一个装饰器函数来装饰一个生成器函数。生成器函数产生问题 #'s 作为装饰添加。装饰器需要接受一个引用函数的参数。包装器需要返回一个格式化的字符串,即提示“问题#:”,其中# 将是在生成器对象上调用 next 所产生的数字。
我知道我的代码不正确,但我不知道如何修复它或从哪里开始。任何帮助将不胜感激
这是我目前拥有的:
df = pd.DataFrame({
'Open': [1, 1.1, 0.9, 0.9],
'High': [1.2, 1.2, 1.1, 1.3],
'Low': [1, 1.0, 0.8, 0.7],
'Close': [1.1, 1.2, 0.8, 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
答案 0 :(得分:1)
如果您有一个简单的生成器,它会产生以下问题:
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 an animal',
'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']