先决条件: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课程。
推荐阅读
- 算法(如何获取链表的末尾开始为第n个节点的值())
- 本文教你电脑打开黑屏原因排查
- 本文教你最容易让win10变回win7的办法
- win7激活工具最新推荐
- 2017最容易的win7pe工具最新推荐
- 安装系统 本文教你重装系统win7
- ie10中文版官方win7 64位最新推荐
- 系统之家win7旗舰版激活制作详细说明
- 本文教你win10怎样换win7