Python如何使用生成器(详细指南)

先决条件:yield关键字和迭代器
我们讨论生成器时涉及两个术语。
【Python如何使用生成器(详细指南)】生成器函数:
生成器函数的定义与普通函数类似, 但是只要需要生成值, 就可以使用
yield关键字
而不是返回。如果def的主体包含yield, 该函数将自动成为生成器函数。

# A generator function that yields 1 for first time, # 2 second time and 3 third time def simpleGeneratorFun(): yield 1 yield 2 yield 3# Driver code to check above generator function for value in simpleGeneratorFun(): print (value)

输出:
1 2 3

生成器对象:
生成器函数返回生成器对象。可以通过在生成器对象上调用next方法或在" for in"循环中使用生成器对象来使用生成器对象(如上述程序所示)。
# A Python program to demonstrate use of # generator object with next() # A generator function def simpleGeneratorFun(): yield 1 yield 2 yield 3# x is a generator object x = simpleGeneratorFun()# Iterating over the generator object using next print (x. next ()) # In Python 3, __next__() print (x. next ()) print (x. next ())

输出:
1 2 3

因此, 生成器函数会返回可迭代的生成器对象, 即可以用作迭代器.
作为另一个示例, 下面是斐波那契数的生成器。
# A simple generator for Fibonacci Numbers def fib(limit):# Initialize first two Fibonacci Numbers a, b = 0 , 1# One by one yield next Fibonacci Number while a < limit: yield a a, b = b, a + b# Create a generator object x = fib( 5 )# Iterating over the generator object using next print (x. next ()) # In Python 3, __next__() print (x. next ()) print (x. next ()) print (x. next ()) print (x. next ())# Iterating over the generator object using for # in loop. print ( "\nUsing for in loop" ) for i in fib( 5 ): print (i)

输出:
0 1 1 2 3Using for in loop 0 1 1 2 3

应用范围:
假设我们创建一个斐波纳契数流, 采用生成器方法使其变得微不足道;我们只需要调用next(x)即可获得下一个斐波那契数, 而不必担心数字流在何处或何时结束。
流处理的一种更实用的类型是处理大型数据文件, 例如日志文件。生成器为此类数据处理提供了一种节省空间的方法, 因为在一个给定的时间点仅处理文件的一部分。我们也可以将Iterators用于这些目的, 但是Generator提供了一种快速的方法(我们无需在此处编写__next__和__iter__方法)。
请参阅下面的链接, 以了解Python中生成器的更多高级应用程序。
http://www.dabeaz.com/finalgenerator/
本文作者:Shwetanshu Rohatgi。如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请发表评论。
注意怪胎!巩固你的基础Python编程基础课程和学习基础知识。
首先, 你的面试准备可通过以下方式增强你的数据结构概念:Python DS课程。

    推荐阅读