Python中生成器的 sned 方式

启动生成器可以用 next 方法,但是它不能够向其中传递数据

启动生成器的第二种方法, send 可以向其中传入数据

重点:send 方式 可以向生成器中传入值,但是接收的值还是 yield 之后的值,起到的作用是改变生成器中变量的值的作用

# 重点:send 可以向生成器中传入值,但时接收的值还是 yield 后面的值,起到的作用是改变生成器中变量的值的作用
def create_num(all_num):
    a = 0
    b = 1
    current_num = 0
    a, b = b, a + b
    while current_num < all_num:
        ret = yield a
        print("ret--------->", ret)
        a, b = b, a + b
        current_num += 1


# 实例化一个生成器
obj = create_num(10)

# next后面的结果为 yield 后面的值
ret = next(obj)
print("next1", ret)
ret = next(obj)
print("next2", ret)
ret = next(obj)
print("next3", ret)

# send后面的结果为 yield 后面的值
# 注意:send 不要在第一次使用 send,除非使用 send(None)
ret = obj.send('你好')
print("send1", ret)
ret = obj.send('你好')
print("send2", ret)
ret = obj.send('你好')
print("send3", ret)

执行结果

send 和 next 结果都是实现生成器的功能,区别是 send 能够传入值

此处只返回两个 None值, 因为 send 执行时是接着上一个 next 执行的,将值传入,并没有返回 send 第一次的值,之后再执行到 yield 返回一次值才算 send 结束

next1 1
ret---------> None
next2 1
ret---------> None
next3 2
ret---------> 你好
send1 3
ret---------> 你好
send2 5
ret---------> 你好
send3 8

Process finished with exit code 0

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值