码迷,mamicode.com
首页 > 其他好文 > 详细

坑集系列

时间:2018-11-02 17:17:57      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:列表   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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!