生成器
Python中的生成器是一种特殊的函数,它可以产生一系列值,这些值可以一个一个地被调用或很自然地生成一个迭代器。生成器函数使用关键词yield来暂停和继续函数执行,yield会返回一个值,并在下一次执行时从上一次离开的位置继续执行,从而使函数可以保留当前的状态和数据。
生成器也是迭代器
生成器的标志:使用yield语句
例如,下面是一个生成斐波那契数列的生成器函数
def fun():
a, b = 0, 1
while True:
yield a
a, b = b, a + b
f = fun()
for i in range(10):
print(next(f))
练习
定义一个生成器函数:
传入两个列表:
列表1: [“red”, “black”, “green”]
列表2: [“S”, “M”, “L”]
1.调用next返回结果: 调用9次next()
输出结果:
(red, S)
(red, M)
(red, L)
…
(green, L)
2.使用循环去访问生成器:
输出结果:
(red, S)
(red, M)
(red, L)
…
(green, L)
注意循环终止的条件
list_data1 = ['red', 'black', 'green']
list_data2 = ['S', 'M', 'L']
def gen_fun():
for i in list_data1:
for j in list_data2:
yield i, j
gen = gen_fun()
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
print()
for item in gen_fun():
print(item)
if item == ("green", "L"):
break
运行结果
('red', 'S')
('red', 'M')
('red', 'L')
('black', 'S')
('black', 'M')
('black', 'L')
('green', 'S')
('green', 'M')
('green', 'L')
('red', 'S')
('red', 'M')
('red', 'L')
('black', 'S')
('black', 'M')
('black', 'L')
('green', 'S')
('green', 'M')
('green', 'L')