生成器、迭代器
所谓生成器就是指能够 “动态提供数据” 的对象,生成器对象也是可迭代对象。
生成器分为:生成器函数 和 生成器表达式 两种
生成器函数:含有 yield语句的函数,此函数被调用返回生成器对象(也是可迭代对象)。在生成器函数中调用return会触发StopIteration异常。
class InteClass(object):
def __init__(self,num):
self.num = num
self.i = self.j = 1
def __iter__(self):
return self
def __next__(self):
if self.i < self.num:
self.j = self.i
self.i += 1
return self.j
raise StopIteration()
for i in InteClass(10000):
print(i)
#################################################
def myInteger(n): i = 1 while i < n: yield i i += 1 for x in myInteger(10000): print(x)
yield语句的作用就是将一个普通的函数编程generator,这样python解释器在识别函数myInteger(10000)时,就不会立即执行,而是返回一个迭代对象,for循环每次内部执行一周期时才会调用一次,从而保重节约空间,提高代码运行效率,又使函数不会像类那样繁琐。
生成器表达式:
(表达式 for 变量 in 可迭代对象 [if 真值表达式 ])
gen = (x ** 2 for x in range(1, 5)) it = iter(gen) next(it) # 1 next(it) # 4 next(it) # 9 next(it) # 16 next(it) # StopIteration
迭代工具函数
迭代工具函数的作用是生成一个个性化的可迭代对象
函数:
zip(iter1[, iter2[, ...]]) 返回一个zip对象,此对象用于生成元组,此元组的个数由最小的可迭代对象决定
enumerate(iterable[, start]) 生成带索引的枚举对象,返回迭代类型为索引-值对(index-value对),默认索引从零开始,也可以用start指定
什么是迭代器
迭代器是访问可迭代对象的工具
迭代器是指用iter(obj) 函数返回的对象(实例)
迭代器可以用next(it) 函数获取可迭代对象的数据
迭代器函数iter和next
iter(iterable) 从可迭代对象中返回一个迭代器,iterable 必须是能提供一个迭代器的对象
next(iterator) 从迭代器iterator中获取下一个记录,如果无法获取下一条记录,则触发StopIteration异常
说明:
迭代器只能向前取值,不会后退
用iter函数可以返回一个可迭代对象的迭代器
作用:
迭代器对象能用next函数获取下一个元素.
L = [2, 3, 5, 7] it = iter(L) # 用L对象返回能访问L的迭代器, it绑定迭代器 next(it) # 2 next(it) # 3 next(it) # 5 next(it) # 7 next(it) # StopIteration 通知(没有数据)
迭代器是访问生成器(可迭代对象)的工具!
def myInteger(n): i = 1 while i < n: yield i i += 1 for x in myInteger(5): print(x)
print("+++++++") it = iter(myInteger(8)) print(next(it)) print(next(it)) print(next(it))