gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 03:03:50 27 4
gpt4 key购买 nike

显然,当我在函数体中放置一个 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 关键字的存在导致绑定(bind)为 '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

关于python - python 如何知道何时返回生成器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17735031/

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