繁体   English   中英

python如何知道何时返回生成器?

[英]How does python know when to return a generator?

当我把yield在函数体中,很明显。 但这不是我想问的问题。 给定交互式解释器中的两个简单函数:

def myGenerator():
    yield 42

def myFunction():
    return 42

当我执行两个时,我看到:

>>> myGenerator()
<generator object myGenerator at 0xb7bf511c>
>>> myFunction()
42

但是如果检查myGeneratormyFunction对象,我看不到任何真正不同的东西:

for attr in dir(myFunction):
    print(attr, getattr(myFunction, attr)

生成看起来与myGenerator相同的东西。 是否有一些魔术位隐藏在函数对象的内容中,解释器分支出来以辨别是否将函数调用包装为生成器? 或者它是否完成了更多的装饰风格,其中yield关键字的存在导致绑定为'myGenerator'的对象被包裹在一些生成器魔法中? 或者是其他东西...?

“生成器函数在所有方面都是普通的函数对象,但在代码对象的co_flags成员中设置了新的CO_GENERATOR标志。”

来自PEP http://www.python.org/dev/peps/pep-0255/

 >>> generator_fn.__code__.co_flags
 >>> 99
 >>> normal_fn.__code__.co_flags
 >>> 67

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM