标签:列表 fun 可迭代对象 一个 nbsp 没有 取值 turn print
1. 生成器的惰性机制: 生成器只有在访问的时候才取值. 说白了. 你找他要他才给你值. 找他要. 他是不会执行的.
def func():
print(111)
yield 222
g = func() # ?成器g
g1 = (i for i in g) # 生成器g1. 但是g1的数据来源于g
g2 = (i for i in g1) # ?成器g2. 来源g1
print(list(g)) # 获取g中的数据. 这时func()才会被执行. 打印111.获取到222. g完毕.
print(list(g1)) # 获取g1中的数据. g1的数据来源是g. 但是g已经取完了. g1 也就没有数据了
print(list(g2)) # 和g1同理
深坑==> 生成器. 要值得时候才拿值.
2.
def add(a, b):
return a + b
def test():
for r_i in range(4):
yield r_i # 0、1、2、3
g = test()
for n in [2, 10]:
g = (add(n, i) for i in g)
print(list(g))
把for循环拆分 对g进行分别命名 比较好理解
def add(a, b):
return a + b
def test():
for r_i in range(4):
yield r_i # 0、1、2、3
g = test()
n=2
g2 = (add(n, i) for i in g1)
n=10
g2 = (add(n, i) for i in g1)
print(list(g2))
3. 一种可以直接把可迭代对象中的每一个数据作为?成器的结果进?返回——yield from
?坑: yield from是将列表中的每?个元素返回. 所以. 如果写两个yield from 并不会产生交替的效果.
def gen():
lst = ["?花藤", "胡辣汤", "微星牌饼铛", "Mac牌锅铲"]
lst2 = ["饼铛还是微星的好", "联想不能煮鸡蛋", "微星就可以", "还可以烙饼"]
yield from lst
yield from lst2
g = gen()
for el in g:
print(el)
标签:列表 fun 可迭代对象 一个 nbsp 没有 取值 turn print
原文地址:https://www.cnblogs.com/honghong7725/p/9897181.html