生成器
在Python中使用了yield的函数被称为生成器(generator) 当一个列表中包含大量元素时,如果一次性生成这些元素并保存在列表中,将占用大量的内存空间,对于这个问题,我们可以通过生成器(generator)来解决,即根据需要进行计算并获取列表中某个元素的值。 对于生成对象,也可以向其他可迭代对象一样使用for循环遍历对象中的每一个元素。
"""
功能:生成表达式
作者:小小榕
日期:2022年4月11日
"""
li = [x * x for x in range(1, 11)]
print(li)
li2 = [x + y for x in 'abc' for y in '123']
print(li2)
将列表表达式中的一对中括号改为小括号即可以得到生成器
"""
功能:生成器
作者:小小榕
日期:2022年4月11日
"""
a = (x * x for x in range(10))
print('a的类型为:',type(a))
for i in a:
print(i, end=' ')
- 结果
如果生成元素的方法比较复杂,不适合用for循环方法实现,我们还可以借助yield关键字利用函数实现生成器的功能。 - 代码
"""
功能:生成阶乘
作者:小小榕
日期:2022年4月11日
"""
def faclist(n):
result = 1
for i in range(2, n + 1):
yield result
result *= i
for i in faclist(10):
print(i, end=' ')
- 结果
例子:使用yield实现斐波那契数列
"""
功能:斐波那契数列
作者:小小榕
日期:2022年4月11日
"""
import sys
def fibonacci(n):
a, b, counter = 0, 1, 0
while True:
if (counter > n):
return
yield a
a, b = b, a + b
counter += 1
f = fibonacci(10)
while True:
try:
print(next(f),end=' ')
except StopIteration:
sys.exit()
|