美文网首页
yield的作用理解

yield的作用理解

作者: 牙齿不帅 | 来源:发表于2019-12-02 14:15 被阅读0次

    Python中的yield和java中的不同,java中的yield是妥协的意味,让出cpu给其他线程执行,但不保证让出成功。
    python中的yield是停止当前函数跳出函数,停止状态的函数等待被调用激活,yield是生成器这是yield实现其功能所必须成为的样子。如函数1:

    def foo():
        print("starting")
        yield
    
    
    g = foo()
    

    运行:
    没有任何输出。这是因为有yield,函数并没有被执行。只是将foo()指向了g。
    函数2:

    def foo():
        print("starting")
        yield 1
        print("ending")
    
    g = foo()
    print(next(g))
    

    运行:输出了starting和1,并没有输出ending,这是因为next(g)只调用了一次,运行到了yield就返回了,print函数打印了返回值:1。这个时候函数停止了,等待下一次的next(g)调用。

    starting
    1
    

    函数3:

    def foo():
        print("starting")
        yield 1
        print("ending")
    
    g = foo()
    print(next(g))
    print(next(g))
    

    运行:接着上面的,第二个next(g)运行,报错是因为遍历结束了,无yield了。解决方法就是在最好加一个yield。

    starting
    1
    ending
    Traceback (most recent call last):
      File "/Users/neu-cyl/PycharmProjects/tensorflow-test/YieldTest.py", line 9, in <module>
        next(g)
    StopIteration
    

    函数4:

    def foo():
        print("starting")
        yield 1
        print("ending")
        yield 2
    
    
    g = foo()
    print(next(g))
    print(next(g))
    print("end")
    

    运行:这样就能运行到ending了。

    starting
    1
    ending
    2
    end
    

    yield的作用挺溜的,其丰富了函数的运行,让函数进入不同的运行阶段。

    相关文章

      网友评论

          本文标题:yield的作用理解

          本文链接:https://www.haomeiwen.com/subject/gybfwctx.html