python迭代器与生成器作用是什么
这篇文章将为大家详细讲解有关python迭代器与生成器作用是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
python迭代器的用途:用next函数获取下一个元素,只能向前取值,不会后退。python生成器的用途:动态提供数据,调用return生成一个StopIteration异常,通知next(it)函数不再提供数据。
一、迭代器
什么是迭代器
迭代器是指用iter(可迭代对象)函数返回的对象(实例)
迭代器可以用next(it)函数获取可迭代对象的数据
迭代器函数:
iter(iterable)从可迭代对象中返回一个迭代器,iterable必须是一个能提供迭代器的可迭代对象
next(iterator)从迭代器iterator中获取下一条记录,如果无法获取下一条记录,则触发StopIteration异常
说明:
迭代器是访问可迭代对象的一种方式
迭代器只能向前取值,不会后退
用iter函数可以返回一个可迭代对象的迭代器
示例:
L=[2,3,4]或者L=range(2,5)it=iter(L)#使用iter函数使it绑定一个迭代器对象next(it)#返回2next(it)#返回3next(it)#返回4next(it)#触发StopIteration异常
迭代器的用途:
迭代器对象能用next函数获取下一个元素
示例:
#此示例示意用迭代器来访问可迭代对象#用for语句访问可迭代对象LL=[2,3,5,7]forxinL:print(x)#用while语句访问可迭代对象Lit=iter(L)whileTrue:try:x=next(L)print(x)exceptStopIteration:print('终止迭代,迭代器不能提供任何数据')break
二、生成器Generator(python2.5之后)
什么是生成器:
生成器是能够动态提供数据的对象(不是一次性生成从而不占据内存空间),生成器对象也是可迭代对象(实例)
生成器有两种:
生成器函数
生成器表达式
生成器函数定义:
含有yield语句的函数是生成器函数,此函数被调用时将返回一个生成器对象
yield语句
语法:yield 表达式
说明:yield用于def函数中,目的是将此函数作为生成器函数使用
yield用来生成数据,供迭代器next(it)函数使用
实例:
#此示例示意生成器函数的定义及示意defmyyield():'''此函数为生成器函数'''yield2#生成2yield3#生成3yield5#生成5#用for语句访问myyield函数forxinmyyield():print(x)#用迭代器访问gen=myyield()it=iter(gen)next(it)
生成器函数说明:
(1)生成器函数的调用将返回一个生成器对象,生成器对象是一个可迭代对象
(2)在生成器函数调用return时会生成一个StopIteration异常来通知next(it)函数不再能提供数据
示例:
#写一个myinteger(n)函数defmyinteger(n):forxinrange(n):yieldx#for循环访问生成器forxinmyinteger(int(input('请输入整数:')))print(x)#用迭代器访问it=iter(myinteger(10))whileTrue:print(next(it))#到10时发生StopIteration错误
生成器表达式:
语法:(表达式 for 变量 in 可迭代对象 [if 真值表达式])
作用:用推导式的形式生成一个新的生成器
示例:
gen=(x**2forxinrange(1,4))#并没有生成数据#gen=[x**2forxinrange(1,4)]#先在内存中生成数据it=iter(gen)next(it)#1next(it)#4next(it)#9next(it)#StopIteration
列表推导式和生成表达式的区别:
生成器是动态生成的,现用现生成,列表表达式是静态的。
示例:
L=[1,2,3,4]gen=(xforxinL)#gen绑定生成器lst=[xforxinL]#lst绑定列表L[1]=222#改变原列表的第二个元素forxinlst:print(x)#1234不变forxingen:print(x)#122234,第二个数是222
迭代工具函数:
迭代工具函数的作用是生成一个个性化的可迭代对象
函数:
zip( iter1 [,iter2,iter3,…])返回一个zip对象,此对象用于生成一个元组,此元组的个数由最小的可迭代对象决定
enumerate(iterable[,start])生成带索引的枚举类型,返回迭代类型为索引-值队(index,value)对,默认索引从零开始,也可以使用start绑定
示例1:
numbers=[10086,10000,10010,95588]names=['中国移动','中国电信','中国联通']forxinzip(numbers,names):print(x)#生成元组:#(10086,'中国移动')#(10000,'中国电信')#(10010,'中国移动')#forn,ainzip(numbers,names):#print(n,a)#d=dict(zip(names,number))生成字典#forxinzip(range(10),numbers,names):#print(x)x为三个对象组成的一个元组
示例2:
#实现机制defmyzip(iter1,iter2):it1=iter(iter1)it2=iter(iter2)whileTrue:x=next(it1)y=next(it2)yield(x,y)forxinmyzip(range(100),range(50))#示例3:names=list('string')forxinenumerate(names,start=100):print(x)#指定start会使索引从start开始#(1000,'s')(101,'t')..返回元组的索引-值对,默认索引从0开始#index=element=x#print('索引是',index,'对应的元素是',element)
关于python迭代器与生成器作用是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。