python如何将函数解释为gen

2024-04-20 12:48:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道,如果函数中存在“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
>>> 

Tags: 对象函数代码indeftypefunction语句
1条回答
网友
1楼 · 发布于 2024-04-20 12:48:55

当Python解析def语句时,它决定代码是定义生成器还是函数。如果代码包含yield表达式,则它是一个生成器。因此,当生成器函数a被调用时,它返回一个generator objectb。在

在调用def语句之前,def语句中的代码不会执行。在


考虑这两个函数:

def gen():
     print('In gen')
     yield 1
     yield 2


def func():
     print('In gen')    

尽管gen和{}都是函数, Python知道gen是一个生成器:

^{pr2}$

如果你看一下检查模块的内部

def isgeneratorfunction(object):
    """Return true if the object is a user-defined generator function.

    Generator function objects provides same attributes as functions.

    See help(isfunction) for attributes listing."""
    return bool((isfunction(object) or ismethod(object)) and
                object.func_code.co_flags & CO_GENERATOR)

所以显然Python在执行函数内部的代码之前首先检查这个问题。在

相关问题 更多 >