python - 普通函数和生成器函数有什么区别?

标签 python generator

我正在尝试理解以下方法,

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/

相关文章:

python - 有没有办法在不重启服务器的情况下使用 Tornado/Python 部署新代码?

python - 如何找出当前系统首选语言是什么

python - 如何将 awk 生成的列加载到 python 列表中

c - 在C中生成一定范围内的随机整数值

python - 为什么Python解释器不隐式创建生成器?

python - 将生成器拆分成 block 而不预先遍历它

python - 如何制作一个过滤列表的迭代器?

python - Scipy:对数正态拟合

node.js - is-port-reachable 使用 promises 在循环中获取结果

python - 类属性应该是树状的还是扁平的?