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

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

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

程序一

#encoding:UTF-8

# **********************************************************
# **    第一个程序
# **    来自  https://blog.csdn.net/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.csdn.net/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.csdn.net/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)

猜你喜欢

转载自blog.csdn.net/leiwangzhongde/article/details/82911095
今日推荐