生成器总结
首先引出问题:
li = [1, 2, 3, 5, 5, 6, 7, 8, 9, 9, 8, 3] 写一个所有数值乘以2的生成器。(编程)
此题也并不难,要求不能用lambda,但我还是将lambda的方式写出来。当时咋就写不出来呢?
方式1:
# lambda方式
li = [1, 2, 3, 5, 5, 6, 7, 8, 9, 9, 8, 3]
new_li = list(map(lambda x: x * 2, li))
print(new_li)
输出结果:[2, 4, 6, 10, 10, 12, 14, 16, 18, 18, 16, 6]
方式2:
li = [1, 2, 3, 5, 5, 6, 7, 8, 9, 9, 8, 3]
g = (i * 2 for i in li)
new_li = []
for num in g:
new_li.append(num)
print(new_li)
输出结果:[2, 4, 6, 10, 10, 12, 14, 16, 18, 18, 16, 6]
方式3:
li = [1, 2, 3, 5, 5, 6, 7, 8, 9, 9, 8, 3]
def test(li):
for i in li:
yield i * 2
g = test(li)
new_li = []
for num in g:
new_li.append(num)
print(new_li)
输出结果:[2, 4, 6, 10, 10, 12, 14, 16, 18, 18, 16, 6]
总结:
生成器:就是存储的一种算法,它并不直接给你返回你要得数据,而是你需要的时候就去向他要,他就按照算法给你。
比如例子3里的yield i*2, 当第一次调用next的时候他就停在这儿了,第2次调用next的时候他在从上一次停留的地方开始计算返回给你数据。
更多关于生成器,请看笔记:https://www.cnblogs.com/alexchenx/p/9100615.html
共有 0 条评论