首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:标识创建生成器的生成器函数

Python:标识创建生成器的生成器函数
EN

Stack Overflow用户
提问于 2013-02-12 08:13:43
回答 1查看 205关注 0票数 2

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

代码语言:javascript
复制
def gen_func():
    yield

gen = gen_func()

// From `gen`, how do I get a reference to `gen_func` ?

我正在实现一个装饰器,用来用一个额外的属性来装饰一个生成器函数。我需要稍后从生成器本身访问该属性。

EN

回答 1

Stack Overflow用户

发布于 2013-03-29 11:14:10

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

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

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14823373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档