什么是生成器:
生成器是一种可以简单有效的创建迭代器的工具
生成器有两种:
1.生成器函数
2.生成器表达式
什么是生成器函数:
含有yield语句的函数是生成器函数,此函数被调用时返回一个生成器对象
yield 语句
语法:
yield 表达式
语法说明:
yield用于def函数中,目的是将此函数作为生成器函数使用,yield用来生成数据,供迭代器的next(it)函数使用
range(start, stop, step)就是生成器函数
生成器函数说明:
生成器函数的调用将返回一个生成器对象,生成器对象用来生成迭代器
在生成器函数内调用return会产生一个StopIteration异常
什么是迭代器:
是指能用next(it)函数取值的对象(实例)
用iter(object)函数可用可迭代对象(序列等或生成器)返回一个迭代器
迭代器说明:
迭代器是访问可迭代对象的一种方法,迭代器只能往前取值不会后退
函数:
iter(x) 从一个对象中返回迭代器(x必须是可迭代对象)
next(it)从迭代器it中获取下一个记录,如果无法获取会产生一个StopIteration异常
l = [1, 2, 3, 4, 5, 6]
it = iter(l)
print(next(it)) # 1
print(next(it)) # 2
print(next(it)) # 3
print(next(it)) # 4
print(next(it)) # 5
print(next(it)) # 6
print(next(it)) # 返回异常StopIteration
def myeven(n):
for i in range(0, n + 1, 2):
yield i
for x in myeven(10):
print(x)
生成器表达式:
作用:
用推导式形式生成一个新的生成器
语法:
(表达式 for 变量 in 可迭代对象 [if 真值表达式])
gen = ( x**2 for x in range(1, 6, 2))
it = iter(gen)
next(it) # 1
next(it) # 9
next(it) # 25
next(it) # StopIteration
迭代工具函数
作用:
生成一个个性化的可迭代对象(生成器)
函数:
zip(iter1, iter2, ...)返回一个zip对象,此对象用于生成元组,,此元组的有最小的可迭代对象决定
enumerate(iterable,start=0)生成带索引的枚举对象,返回的迭代类型为索引-值对(index-value),默认索引以零开始,也可以用start指定
numbers = [10086, 10000, 10010, 95588]
names = ["中国移动","中国联通","中国电信"]
for x in zip(range(1,10000),names,numbers):
print(x)
for x in enumerate(names,start=200):
print(x)