首先我们用一个例子来演示一下迭代生成器yield的基本使用方法,这个例子的作用是构造一个函数用于生成一个平方数组0²,1²,2²…。在普通的场景中我们一般会直接构造一个空的列表,然后将每一个计算结果填充到列表中,最后return列表即可,对应的是这里的函数square_number。而另外一个函数square_number_yield则是为了演示yield而构造的函数,其使用语法跟return是一样的,不同的是每次只会返回一个值:
# test_yield.py
def square_number(length):
s = []
for i in range(length):
s.append(i ** 2)
return s
def square_number_yield(length):
for i in range(length):
yield i ** 2
if __name__ == '__main__':
length = 10
sn1 = square_number(length)
sn2 = square_number_yield(length)
for i in range(length):
print (sn1[i], '\t', end='')
print (next(sn2))
在main函数中我们对比了两种方法执行的结果,打印在同一行上面,用end=’'指令可以替代行末的换行符号,具体执行的结果如下所示:
[dechin@dechin-manjaro yield]$ python3 test_yield.py
0 0
1 1
4 4
9 9
16 16
25 25
36 36
49 49
64 64
81 81
可以看到两种方法打印出来的结果是一样的。也许有些场景下就是需要持久化的存储函数中返回的结果,这一点用yield也是可以实现的,可以参考如下示例:
# test_yield.py
def square_number(length):
s =

本文通过对比普通函数与使用 yield 的迭代生成器,展示了如何利用 yield 减少内存占用。通过计算100000个随机数的平方和,验证了使用 yield 在内存效率上的优势。此外,还介绍了无限长迭代器的概念,如生成素数或偶数的迭代器,进一步说明了 yield 在处理大量数据时的实用性。
最低0.47元/天 解锁文章
1843





