gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:17:16 25 4
gpt4 key购买 nike

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

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

关于Python:识别创建生成器的生成器函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14823373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com