给定一个生成器对象,是否可以识别用于创建它的函数?
def gen_func():
yield
gen = gen_func()
// From `gen`, how do I get a reference to `gen_func` ?我正在实现一个装饰器,用来用一个额外的属性来装饰一个生成器函数。我需要稍后从生成器本身访问该属性。
发布于 2013-03-29 11:14:10
您所要求的内容不可能以一种干净的方式实现,这既是因为生成器对象无法访问其生成器函数,也是因为无法在生成器上创建新属性。
但你想要实现的目标可能是可能的。下面是一个示例装饰器,它将生成器包装在迭代器对象中,并将自定义属性添加到迭代器对象中:
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.foohttps://stackoverflow.com/questions/14823373
复制相似问题