迭代器 Iterator
什么是迭代器
迭代器是访问可迭代对象的一种方式,用迭代器可以访问可迭代对象
迭代器是指iter(可迭代对象) 返回的对象
迭代器可以用next(it)函数获取可迭代对象的数据
迭代器函数 iter 和 next
iter(iterable) 从可迭代对象中返回一个迭代器,iterable必须是能提供一个迭代器的对象
next(iterator) 从迭代器iteraror中获取下一个记录,如果无法获取下一条记录,则触发StopIterator异常
迭代器说明:
迭代器只能往前取值,不会后退
用iter函数可以返回一个可迭代对象的迭代器
可迭代对象可以生成一个迭代器
iterable:可迭代的对象
iterator:迭代器
示例:
L=[2,3,5,7]
it=iter(L) #用iter返回一个迭代器用it绑定
next(it) #2 #用next(it) 用迭代器来获取L中的元素
next(it) #3
next(it) #5
next(it) #7
next(it) #StopIteration #通知next调用者,已无数据
iter函数通常和可迭代对象(iterable)组合使用,返回一个迭代器,此迭代器相当于一个第三方的容器,此时的it就是第三方容器,只访问可迭代对象,供next函数获取其中的值
next函数通常和迭代器(第三方容器)组合使用,返回可迭代对象中的数值
示例二:
it=iter(range(1,10,3))
next(it)
next(it) # 2
next(it) # 3
next(it) # 5
next(it) # 7
next(it) # StopIteration
用while语句访问可迭代对象数据:
l=[2,3,5,7]
it=iter(l)
while True:
try:
x = next(it)
print(x)
except StopIteration:
break
生成器 generator (python 2.5及之后的版本)
什么是生成器:
生成器是能够动态提供数据的对象,生成器对象也是可迭代对象
静态提供数据:是指原来就有这个数据,直接从里面拿数据的方法称为静态提供数据
例如:
l=[2,3,4,5] #已存在的数据
for x in l:
print(x) #此时的x就是静态拿数据
动态提供数据:是指现用现生成的数据,这个数据不占用计算机的内存,用完就会释放掉
例如:
for i in range(100):
print(i) #此时的i是动态提取数据,该数据原来不存在,现用现生成的,用完就会释放,不会占用计算机内存
生成器有两种:
生成器函数
生成器表达式
生成器函数定义:
含有yield语句的函数是生成器函数,此函数被调用将返回一个生成器对象
yield 翻译为:产生或生成
yield语句:
语法:
yield 表达式
说明:
yield 用于def函数中,目的是将此函数作为生成器函数使用
yield 用来生成数据,供next(it)函数使用
示例:
def myyield(): #此函数为生成器函数
yield 4
yield 5
yield 6
yield 7
print("生成器函数调用结束")
gen=myyield()
# print(gen) # gen绑定生成器对象,此对象为可迭代对象
for x in gen:
print(x)