我知道,如果函数中存在“yield”语句,它将被视为生成器。 但是当函数(生成器)第一次调用时,python解释器是如何工作的,我的意思是当代码被解释时,我认为第一个“gen”将绑定到一个函数对象上。为什么它在第一次调用时不在生成之前执行语句,这与普通函数或类不同。它如何在生成之前暂停print函数的执行
>>> def gen():
... print("In gen")
... yield 1
... yield 2
...
>>> type(gen)
<type 'function'>
>>> a = gen
>>> type(a)
<type 'function'>
>>>
>>> b = a()
>>> type(b)
<type 'generator'>
>>> b.next()
In gen
1
>>> b.next()
2
>>>
当Python解析
def
语句时,它决定代码是定义生成器还是函数。如果代码包含yield
表达式,则它是一个生成器。因此,当生成器函数a
被调用时,它返回一个generator object
,b
。在在调用
def
语句之前,def
语句中的代码不会执行。在考虑这两个函数:
尽管}都是函数,
Python知道
^{pr2}$gen
和{gen
是一个生成器:如果你看一下检查模块的内部
所以显然Python在执行函数内部的代码之前首先检查这个问题。在
相关问题 更多 >
编程相关推荐