显然,当我将一个yield
in 函数体放入时。但这不是我要问的。给定交互式解释器中的两个简单函数:
def myGenerator():
yield 42
def myFunction():
return 42
当我执行两者时,我看到:
>>> myGenerator()
<generator object myGenerator at 0xb7bf511c>
>>> myFunction()
42
但是如果检查myGenerator
andmyFunction
对象,我看不出有什么不同:
for attr in dir(myFunction):
print(attr, getattr(myFunction, attr)
产生看起来与myGenerator
. 函数对象的内部是否隐藏了一些神奇的位,解释器分支出来以识别是否将函数调用包装为生成器?或者它是做更多的装饰风格,yield 关键字的存在导致对象'myGenerator'
被绑定在一些生成器魔法中?或者是其他东西...?