Skip to main content
 首页 » 编程设计

Python:识别创建生成器的生成器函数

2025年05月04日12xxx_UU

给定一个生成器对象,是否可以识别用于创建它的函数?

def gen_func(): 
    yield 
 
gen = gen_func() 
 
// From `gen`, how do I get a reference to `gen_func` ? 

我正在实现一个装饰器,用于装饰带有附加属性的生成器函数。稍后我需要从生成器本身访问该属性。

请您参考如下方法:

你真正要求的是不可能以一种干净的方式实现的,这既是因为生成器对象无法访问它们的生成器函数,也是因为无法在生成器上创建新属性。

但是您尝试实现的可能是可能的。下面是一个示例装饰器,它将生成器包装在迭代器对象中,并将自定义属性添加到迭代器对象:

def add_stuff(f): 
    def replacement(*args, **kwargs): 
        gen = f(*args, **kwargs) 
        class FakeGenerator(object): 
            def __iter__(self): 
                return self 
            def next(self): 
                return gen.next() 
        fakegen = FakeGenerator() 
        fakegen.foo = "whatever" 
        fakegen.generator_function = f 
        return fakegen 
    return replacement 
 
@add_stuff 
def gen_func(): 
    yield 
 
gen = gen_func() 
print gen 
print gen.foo