1. yield关键字
笔者已经在其他博客中介绍了使用yield关键字构造Python生成器的用法。生成器具有以下优势:
- 生成器会返回一个生成器对象,而不是一次性执行完函数体内的所有代码。
- 生成器是一种特殊的迭代器,它支持惰性计算,即按需产生数据,这对于处理大量数据或进行复杂计算时非常有用,因为它可以显著减少内存使用。
这里仅举一个例子介绍生成器的用法。具体如下(执行结果省略):
def simple_generator():
yield 1
yield 4
yield 5
gen = simple_generator()
print(next(gen))
print(next(gen))
print(next(gen))
在运行这段代码的时候要注意gen = simple_generator()这句不能省略,否则输出的结果永远都是1。
除了yield,还可以使用如下方式生成器:
(a for a in [1,2,3,4])
这里主要基于生成器介绍yield的高级用法。
1.1 生成无限序列
生成器函数在每次执行时都会保持其状态,并且生成器采用的惰性计算,所以生成器非常适合生成无限序列或大数据集,而不必事先将所有数据存储在内存中。代码举例如下(执行结果省略):
def myGenerator():
num=0
while True:
yield num
num+=1
for i in myGenerator():
print(i)
if i>5:
break
理论上myGenerator()函数可以一直运行下去,这里为了避免陷入死循环,在i>5的情况下强制跳出。python中
1.2 数据过滤
yield
可以与条件结合使用,用于过滤生成的值。这允许生成器仅生成符合特定条件的值。具体用法举例如下(执行结果省略):
def myGenerator():
num=0
while True:
if num%2==0:
yield num
num+=1
gen=myGenerator()
for _ in range(5):
print(next(gen))