我正在尝试理解以下方法,
In [26]: def generator():
....: print 'generator function hits'
....: for i in range(3):
....: yield i
....:
In [27]: def normal():
....: print 'normal function hits'
....: return range(3)
....:
In [28]: gen = generator()
In [29]: type(gen)
Out[29]: generator
In [30]: fun = normal()
normal function hits
In [31]: type(fun)
Out[31]: list
这里是我从上面的代码中研究出来的,
26 是 generator()
函数,27 是 normal()
函数,当我将 generator()
函数分配给 gen 变量时,我还没有'看到任何像generator function hits 这样的打印消息,但是如果我将 normal()
函数分配给 fun 变量,我会看到像 normal 这样的打印消息功能命中。我的问题是为什么 generator() 函数没有命中?
最佳答案
因为生成器函数的主体在您调用 next
之前不会执行。
>>> gen = generator()
>>> next(gen)
generator function hits
0
现在,在第二次调用 next()
时,生成器将从它停止的地方再次运行:
>>> next(gen)
1
关于python - 普通函数和生成器函数有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22214490/