Skip to main content
 首页 » 编程设计

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

2025年05月04日15zlslch

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

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