• python yield 理解与用法


    1、一句话快速理解

    yield 等于 return  这么简单理解

    2、详细说明:

    yield和return的关系和区别了,带yield的函数是一个生成器,而不是一个函数了

    这个生成器有一个函数就是next函数,next就相当于“下一步”生成哪个数,这一次的next开始的地方是接着上一次的next停止的地方执行的,所以调用next的时候,生成器并不会从foo函数的开始执行,只是接着上一步停止的地方开始,然后遇到yield后,return出要生成的数,此步就结束。

    3、从代码理解:

    next()函数
    def foo():

      print("starting...")
      while True:
        res = yield 4
        print("res:",res)
    g = foo()
    print(next(g))
    print("*"*20)
    print(next(g))

    输出结果:

    starting...
    4
    ********************
    res: None
    
    分析:直到调用next方法,foo函数正式开始执行,碰到yield 结束,再next 会续接到yield后,res没被执行(因为第一个next就直接return 掉了),
    send()函数
    def foo(): print("starting...") while True: res = yield 4 print("res:",res) g = foo() print(next(g)) print("*"*20) print(g.send(7))

    输出结果
    starting...
    4
    ********************
    res: 7
    4

    分析:程序执行g.send(7),程序会从yield关键字那一行继续向下运行,send会把7这个值赋值给res变量,打印了 res:7 然后因为函数里面是while true循环,所以再次执行到 "res=yield 4" 返回4 打印4, 结束

      

      

    4、优点

    range  pk  yield

    for n in range(1000):
        a=n
    
    range默认生成一个含有1000个数的list了,所以很占内存
    
    def foo(num):
        print("starting...")
        while num<10:
            num=num+1
            yield num
    for n in foo(0):
        print(n)
    

      

  • 相关阅读:
    Java学习之Jdk配置
    Socket网络模型之Select模型
    c#之初见反射
    c++读取文件夹中的文件
    C#泛型的初步理解
    C#接口简单介绍
    c#类,属性,方法和对象基本介绍
    事件的基本认识
    委托的基本认识
    在Xshell中使用rz命令上传文件出现乱码且文件无法删除的解决办法
  • 原文地址:https://www.cnblogs.com/wdw31210/p/10565457.html
Copyright © 2020-2023  润新知