Python高级特性-生成器
前言
生成器相比普通迭代器的实现,不会像普通迭代器生成完整集合返回,而是一边循环一边计算的机制,从而节省大量的空间。
普通迭代器
def triangles(line):
result = []
for x in range(line):
array = []
value = 1
for x1 in range(x + 1):
if x > 1 and 0 < x1 < x:
value = value + result[x - 1][x1]
array.append(value)
value = result[x - 1][x1]
else:
array.append(1)
result.append(array)
return result
生成器
def triangles(line):
last_array = None
for x in range(line):
array = []
value = 1
for x1 in range(x + 1):
if x > 1 and 0 < x1 < x:
value = value + last_array[x1]
array.append(value)
value = last_array[x1]
else:
array.append(1)
last_array = array
yield array
def triangles():
array = [1]
yield array
while True:
array = [v + w for v, w in zip([0] + array, array + [0])]
yield array
测试
两种实现方式,结果都是一样的
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
Process finished with exit code 0
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术