Python 为什么不执行生成器函数中的命令?

Python 为什么不执行生成器函数中的命令?,python,generator,Python,Generator,在python中创建生成器对象时,如下所示: def gen(): print("Hello") yield 1 x=gen() print(x) 唯一的控制台输出将是:。为什么它不打印“Hello”呢?如果将gen函数更改为仅返回值而不是生成器(因此将“yield”更改为“return”),则执行打印命令,以便控制台输出为: 你好 为什么会这样?如何在生成器函数中执行命令?有一条著名的语句:Python中的一切都是对象。所以当你们这样做的时候,你们只需要把生成器分配给变

在python中创建生成器对象时,如下所示:

def gen():
    print("Hello")
    yield 1

x=gen()

print(x)
唯一的控制台输出将是:。为什么它不打印“Hello”呢?如果将gen函数更改为仅返回值而不是生成器(因此将“yield”更改为“return”),则执行打印命令,以便控制台输出为:

你好


为什么会这样?如何在生成器函数中执行命令?

有一条著名的语句:Python中的一切都是对象。所以当你们这样做的时候,你们只需要把生成器分配给变量,就是这样。您可以使用以下功能执行类似操作:

>>> def func():
...     pass
... 
>>> x = func
>>> x
<function func at 0x7f78f03662d0>
在您的情况下,只需使用
next()


尝试运行
next(x)
。没有发生任何事情,因为您没有在生成器上迭代。啊,这是有道理的。因此,创建生成器的函数内部的代码只在您迭代时调用,而不是在生成器本身创建时调用。谢谢这回答了你的问题吗?这将帮助您更好地理解所使用的生成器函数。
>>> def gen():
>>>     yield 1
>>>     yield 2
>>> list(gen())
[1, 2]
>>> def gen():
>>>     print("Hello")
>>>     yield 1
>>> x=gen()
>>> print(next(x))
hello
1