Python 如何创建装饰生成器函数的装饰器?

Python 如何创建装饰生成器函数的装饰器?,python,generator,decorator,wrapper,python-decorators,Python,Generator,Decorator,Wrapper,Python Decorators,我需要创建一个装饰函数来装饰生成器函数。生成器函数产生问题#,作为装饰添加。装饰程序需要接受引用函数的参数。包装器需要返回一个格式化字符串,该字符串是提示符'Question#::'where#将是通过调用生成器对象的next生成的数字 我知道我的代码不正确,但我不知道如何修复它,也不知道从这里可以走到哪里。任何帮助都将不胜感激 这就是我目前拥有的: def decorator(func): """decorator that constructs and

我需要创建一个装饰函数来装饰生成器函数。生成器函数产生问题#,作为装饰添加。装饰程序需要接受引用函数的参数。包装器需要返回一个格式化字符串,该字符串是提示符'Question#::'where#将是通过调用生成器对象的next生成的数字

我知道我的代码不正确,但我不知道如何修复它,也不知道从这里可以走到哪里。任何帮助都将不胜感激

这就是我目前拥有的:

def decorator(func):

    """decorator that constructs and saves a generator object"""

    gen_object = func()

    @wraps(func)
    def wrapper(*args, **kwargs):
        """wrapper"""
        question = func(*args, **kwargs)
        input(f'Question {question} <movie character>: ')
        return wrapper
def decorator(func):
“”“构造并保存生成器对象的装饰器”“”
gen_object=func()
@包装(func)
def包装(*args,**kwargs):
“包装器”
问题=函数(*args,**kwargs)
输入(f'Question{Question}:')
返回包装器

如果您有一个简单的生成器,可以生成以下问题:

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']

我真的不明白你在问什么。如果您演示了代码的含义,那么它会有所帮助。包装后的结果应该是一个生成器,还是一个普通函数?如果它是一个生成器,它是否应该从原始生成器生成经过包装/修改的结果,或者确切地说是什么?如果它是一个函数,它应该从生成器中获取所有结果,然后。。。具体做什么?为什么在您的示例中有一个
input
调用?某种类型的调用可能会有所帮助。请加一个。