zoukankan      html  css  js  c++  java
  • [Python]YIELD_1

    def foo():
        print("***Starting***")
        while True:
            res = yield 4
            print("res:",res)
    
    g=foo()
    print(g)

    程序开始执行以后,因为foo函数中有yield关键字,所以foo函数并不会真的执行,而是先得到一个生成器g(相当于一个对象)

    最后的输出结果为:

    (4Project) PS D:PythonVirtualEnvPythonVirtualEnv_391> & d:/PythonVirtualEnv/PythonVirtualEnv_391/4Project/Scripts/python.exe d:/PythonVirtualEnv/PythonVirtualEnv_391/tmp.py
    <generator object foo at 0x0000025A8EACAD60>

    可以从上面看到,最后得到的是一个生成器对象foo;

    def foo():
        print("***Starting***")
        while True:
            res = yield 4
            print("res:",res)
    
    g=foo()
    # print(g)
    print(next(g))
    print(next(g))

    最后的输出结果:

    (PythonVirtualEnv_3100) PS D:PythonVirtualEnvPythonVirtualEnv_3100Scripts> & d:/PythonVirtualEnv/PythonVirtualEnv_3100/Scripts/python.exe d:/PythonVirtualEnv/PythonVirtualEnv_3100/tmp_2.py
    ***Starting***
    4
    
    res: None
    4

    其中,前两行为第一个

    print(next(g))

    的输出结果;

    后两行,为第二个

    print(next(g))

    的输出结果;

    简单说下流程:

    1、程序开始执行以后,因为foo函数中有yield关键字,所以foo函数并不会真的执行,而是先得到一个生成器g(相当于一个对象);

    2、直到调用next方法,foo函数正式开始执行,先执行foo函数中的print方法,然后进入while循环;

    3、程序遇到yield关键字,然后把yield想想成return,return了一个4之后,程序停止,并没有执行赋值给res操作,此时next(g)语句执行完成,所以输出的前两行(第一个是while上面的print的结果,第二个是return出的结果)是执行print(next(g))的结果;

    4、开始执行下面的print(next(g)),这个时候和上面那个差不多,不过不同的是,这个时候是从刚才那个next程序停止的地方开始执行的,也就是要执行res的赋值操作,这时候要注意,这个时候赋值操作的右边是没有值的(因为刚才那个是return出去了,并没有给赋值操作的左边传参数),所以这个时候res赋值是None,所以接着下面的输出就是res:None.

    5、程序会继续在while里执行,又一次碰到yield,这个时候同样return 出4,然后程序停止,print函数输出的4就是这次return出的4;

  • 相关阅读:
    svn cleanup failed–previous operation has not finished 解决方法
    开源SNS社区系统推荐
    从网络获取图片本地保存
    MS SQL Server 数据库连接字符串
    KeepAlive
    Configure Git in debian
    sqlserver query time
    RPi Text to Speech (Speech Synthesis)
    SQL Joins with C# LINQ
    search or reseed identity columns in sqlserver 2008
  • 原文地址:https://www.cnblogs.com/LeeCookies/p/15496116.html
Copyright © 2011-2022 走看看