【问题标题】:What is the difference between normal function and generator function?普通函数和生成器函数有什么区别?
【发布时间】:2014-04-08 11:58:27
【问题描述】:

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

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 function hits 这样的打印消息。我的问题是why generator() function not hit ?

【问题讨论】:

标签: python generator


【解决方案1】:

因为在您调用 next 之前,不会执行生成器函数的主体。

>>> gen = generator()
>>> next(gen)
generator function hits
0

现在在第二次next() 调用中,生成器将从中断处再次运行:

>>> next(gen)
1

【讨论】:

    【解决方案2】:

    Generator 函数在 yield 处停止,接下来你再次调用它会从 yield 停止的地方恢复。 xrange 也是 range 函数的内置生成器版本。由于range返回列表,xrange按需生成数字,内存效率在xrange一边。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 2019-05-24
      • 2014-05-02
      • 1970-01-01
      • 2016-11-26
      相关资源
      最近更新 更多