三个验证python - yield 作用的小程序

三个程序分别来自网络,yield 总让我觉得像 c++ 里 list 中iterator 的感觉

关于解释,全部都在注释里,运行一下立刻就能明白

程序一

#encoding:UTF-8

# **********************************************************
# **    第一个程序
# **    来自  https://blog.youkuaiyun.com/u013205877/article/details/70332612
# **          代码示例1:
# **********************************************************
def yield_test(n):
    for i in range(n):
        yield call(i)       # 看起来 就是c++里的iterator 用完一次之后就不能再用了
        print("i=",i)
    # 做一些其它的事情
    print("do something.")
    print("end.")


def call(i):
    return i*2

#使用for循环
for i in yield_test(5):
    print(i,",")        # 主程序print 之后,还是要进到子程序yield_test 中去

程序二

#encoding:UTF-8
# **********************************************************
# **    第二个程序
# **    来自  https://blog.youkuaiyun.com/lftaoyuan/article/details/78915518
# **********************************************************
def s():
    print('study yield')
    print('study yield')
    print('study yield')
    print('study yield')
    m = yield 5
    print(m)
    d = yield 16
    print('go on!')

c = s()
s_d1 = next(c)  # 相当于send(None)
s_d2 = c.send('Fighting!')  # (yield 5)表达式被赋予了'Fighting!'
print('My Birth Day:', s_d1, '.', s_d2)

程序三

#encoding:UTF-8
# **********************************************************
# **    第三个程序
# **    来自  https://blog.youkuaiyun.com/lftaoyuan/article/details/78915518
# **********************************************************
def s():
    print('study yield')
    # yield的作用其实就是跳出子函数,之后在主程序中执行 next 或者 send,然后 m 获得一个值
    m = yield 5     # 如果是主程序里是 next  那么m就获得的是None  空值
    print(m)        # m在返回主程序又send 到子程序后  变成了 'Fighting!'
    d = yield 16
    print('go on!')     # 在最后一个yield后面的程序  一般不再执行,否则会报错


c = s()
s_d = next(c)  # 相当于send(None)  s_d 此时是 yield 5 的返回值5
print(s_d)      # 输出了5
# next(c)
d_main = c.send('Fighting!')  # (yield 5)表达式被赋予了'Fighting!'
print(d_main)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值