python生成器(Generator)

先解释几个易混淆的概念:

  • 可迭代对象(Iterable)
  • 迭代器(Iterator)
  • 迭代(Iteration)

Python中任意的对象,只要它定义了可以返回一个迭代器的__iter__方法,或者定义了可以支持下标索引的__getitem__方法,那么它就是一个可迭代对象。简单说,可迭代对象就是能提供迭代器的任意对象。

Python中任意的对象,只要定义了next(Python2) 或者__next__方法,它就是一个迭代器。注意:可迭代对象不一定是迭代器,也即对象即使支持迭代,因为缺少next或__next__方法也不能直接对其进行迭代操作,这个时候可以使用内置函数iter来返回一个迭代器对象。

迭代用简单的话讲,它就是从某个地方(比如一个列表)取出一个元素的过程。当我们使用一个循环来遍历某个东西时,这个过程本身就叫迭代。

生成器也是一种迭代器,但是你只能对其迭代一次。这是因为它们并没有把所有的值存在内存中,而是在运行时生成值。你通过遍历来使用它们,要么用一个“for”循环,要么将它们传递给任意可以进行迭代的函数和结构。大多数时候生成器是以函数来实现的。然而,它们并不返回(return)一个值,而是提供(yield)一个值,这样就不必担心使用大量资源。例如,计算斐波那契数列的生成器如下所示:

# generator versiondef fibon(n): a = b = 1 for i in range(n): yield a a, b = b, a + b

函数使用方法如下:

for x in fibon(1000000): print(x)

郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
上一篇 2022年6月16日 06:15
下一篇 2022年6月16日 06:15

相关推荐

联系我们

联系邮箱:admin#wlmqw.com
工作时间:周一至周五,10:30-18:30,节假日休息