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

生成器函数_yield_yield from_send

时间:2019-03-29 00:37:52      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:没有   执行   bsp   art   send   数列   for   默认   next   

生成器函数

 1 ‘‘‘
 2 yield类似于return
 3 
 4 相同:
 5    都返回出去一个值
 6 
 7 不同:
 8    yield每次返回时, 会记录当前执行的位置
 9    等下次调用生成器, 会从该位置向下走
10 
11    return 直接终止函数
12 ‘‘‘
13 
14 
15 # 2. 生成器函数
16 def mygen():
17    print(one)
18    yield 1
19 
20    print(two)
21    yield 2
22 
23    print(three)
24    yield 3
25 
26 
27 # 创建生成器对象
28 gen = mygen()
29 
30 
31 # 使用next
32 res = next(gen)
33 
34 ‘‘‘
35 首先初始化生成器, 返回一个生成器对象
36 
37 第一次调用: 执行print(‘one‘), yield返回1, 
38 暂停记录当前位置
39 
40 第二次调用: 执行print(‘two‘), yield返回2,
41 暂停记录当前位置
42 
43 第三次调用: 执行print(‘three‘), yield返回3,
44 暂停记录当前位置, 
45 
46 此时生成器已经不能在返回数据, 再次调用就会报错
47 
48 ‘‘‘

生成器写斐波那契数列?

 1 def fbnq(max_len):
 2    a = 0
 3    b = 1
 4 
 5    i = 0
 6    while i < max_len:
 7       yield b
 8       a, b = b, a + b
 9       # yield a
10       i += 1
11 
12 
13 gen = fbnq(10)
14 for i in gen:
15    print(i)

send

 1 ‘‘‘
 2 next和send的区别:
 3    next: 只能取值
 4    send: 能取本次yield的返回值, 
 5    也能给上次yield传入值.
 6    
 7 send注意点:
 8    第一个send不能给yield传值, 默认写None
 9    最后一个yield接收不到send的发送值
10 ‘‘‘
 1 def mygen():
 2    print(start)
 3    res = yield 1
 4    print(res)
 5 
 6    # res是send第二次的传入值, yield把2返回给send
 7    res = yield 2
 8    print(res)
 9 
10    res = yield 3
11    print(res)
12 
13 
14 # 初始化生成器, 获得生成器对象
15 gen = mygen()
16 
17 # 第一次调用, send传入None
18 yield_res = gen.send(None)
19 yield_res = gen.send(send1)
20 yield_res = gen.send(send2)
21 # 此时生成器已经没有数据, 再次调用就会报错
22 # yield_res = gen.send(‘send3‘)
1 # send和next可以混合使用
2 gen = mygen()
3 yield_res = gen.send(None)
4 yield_res = next(gen)
5 yield_res = next(gen)

yield from

把可迭代对象变成一个迭代器返回

 1 def mygen():
 2    listvar = ["鼎泰亚", "李楠", "陈根基", "陈元勇"]
 3 
 4    yield from listvar
 5 
 6 
 7 gen = mygen()
 8 
 9 for i in gen:
10    print(i)

 

生成器函数_yield_yield from_send

标签:没有   执行   bsp   art   send   数列   for   默认   next   

原文地址:https://www.cnblogs.com/caihuajiaoshou/p/10618608.html

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