摘要:本文主要向大家介绍了Python语言之Python迭代器和生成器,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助。
本文主要向大家介绍了Python语言之Python迭代器和生成器,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助。
迭代器:
迭代的意思是重复做一些事很多次——就像循环一样。我们经常在for循环中对列表或字典进行迭代,但事实上也能对其它对象进行迭代,只要该对象实现了__iter__方法。__iter__方法返回一个迭代器(iterator),迭代器就是具有next方法(该方法在调用时不需要任何参数)的对象。在调用next方法时,迭代器会返回它的下一个值。如果next方法被调用,但迭代器没有值可以返回,则会引发一个StopIteration异常。更精确的说,一个实现了__iter__方法的对象是可迭代的,一个实现了next方法的对象则是迭代器。
说到这,那我们为什么要使用迭代器?因为迭代器更通用、更简单、更优雅。举个例子,创建一个迭代器,每次返回的数都在原基础上加2:
class add():
def __init__(self):
self.a = 0
self.b = 2
# python3中迭代器对象应该实现__next__方法,而不是next方法,而新的内建函数next可以用于访问这个方法。
# 换句话说,next(it)等同于python2中的it.next()。
def __next__(self):
self.a = self.a + self.b
return self.a
def __iter__(self):
return self
这里需要注意的是,迭代器实现了__iter__方法,这个方法实际上返回迭代器本身,这样操作,程序就能返回所需的迭代器,就能直接在for循环中使用迭代其本身了。请看下述例子:
#创建一个add对象,可以在for循环中使用该对象
Add = add()
for i in Add:
if i > 2000:
print(i)
break
#输出结果:
2002
迭代器有两个重要方法:iter() 和 next(),内建函数iter可以从可迭代对象中获取迭代器,next函数可以获取它返回的下一个值。举个例子:
list = [1,2,3,4,5]
it = iter(list)
while True:
try:
print(next(it)) #或者 it.__next__()
except Exception as e:
break
生成器:
任何包含yield语句的函数称为生成器,跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。调用一个生成器函数,返回的是一个迭代器对象。举个例子:
import sys
def fibonacci(n): #生成器函数 - 斐波那契
a,b,no = 0,1,0
while True:
if (no > n):
return
yield a
a,b = b,a+b
no += 1
f = fibonacci(20) # f是一个迭代器,由生成器返回生成
while True:
try:
print(next(f),end=",")
except StopIteration:
sys.exit()
#运行结果:
0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,
本文由职坐标整理并发布,希望对同学们学习Python有所帮助,更多内容请关注职坐标编程语言Python频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号