zoukankan      html  css  js  c++  java
  • yield理解

    简单点说 就是把yield看成return 然后走到一个yield 把这个yield当做return  return出去之后程序就暂停,然后下一次next的时候,再从上个yield结束后的地方开始执行

    1.yield的举例,理解

    def func():
        for i in range(5):
            print('i的值为',i)
            res = yield i
            print('yield后res的值为',res)
    f = func()
    #程序走到yield停止 打印出print中的语句  以及函数的返回值
    print(next(f))# 输出:i的值为 0   同时输出函数的返回值i  即 0
    
    #从yield处执行,这里因为上一个next中将i 返回出去了,所以这里next开始的时候 res是没有值的是None
    #可以理解为上一个next的步骤中结尾为 yield i  然后这个next的开始就只有res = ,  =后面的yield已经在上一步执行完了,所以就是None
    print(next(f))#输出:yield后res的值为 None  然后继续循环  输出:i的值为 1  然后碰到yield停下来,打印出函数的返回值i 即1
    
    #同上
    print(next(f))
    
    #因为按照上述的理解,yield之后 res=  ,=后面的内容在上一步中执行完毕了,所以就没有值传递过来
    #这里send是相当于加了这么一步,传递给  res = , =号右边的内容,传递给了yield的意思
    #所以为了理解方便,send可以看做是 一个next()方法 加上传递一个 值过去 代替yield的内容
    print(f.send(88888))#输出: yield后res的值为 88888   i的值为 3  打印出函数的返回值i 即3

    2.send不能放在第一次,除非send(None),这样和next()的意义一样,所以还是在执行一次next()之再执行send()

    def func2():
        while True:
            yield 1
    
    f2= func2()
    f2.send('zz')
    #报错:TypeError: can't send non-None value to a just-started generator

    3.多个yield

    def F():
        for i in range(5, 9):
            for j in range(21, 29):
                x = yield i
                print('x 为',x)
                y = (yield j) * 100
                print('y 为',y)
                x += y
                print ('>>>', x)
    
    gen = F()
    #这里return 的是i的值5然后停止
    print(next(gen))#  return 5 
    
    #继续执行,x = 66 然后走到  y = (yield j) * 100 这里停下,return 的是j的值 21
    print(gen.send(66))# return j=21
    
    #继续执行,y = 77*100=7700  打印出来,然后打印出 x+y =66+7700  然后继续循环走到 x = yield i,这里return i的值5
    print(gen.send(77))# return i=5
  • 相关阅读:
    Saltstack module apache 详解
    Saltstack module ip 详解
    Saltstack module iosconfig 详解
    Saltstack module introspect 详解
    Saltstack module inspector 详解
    Saltstack module ini 详解
    Saltstack module incron 详解
    Modbus 指令 RS485指令规则
    停车系统对接第三方在线支付平台(二)
    停车系统对接第三方在线支付平台
  • 原文地址:https://www.cnblogs.com/alantammm/p/13646336.html
Copyright © 2011-2022 走看看