zoukankan      html  css  js  c++  java
  • 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)
    

      

  • 相关阅读:
    CentOS7 Python2.7.5升级3.7.1
    kubernets 集群和本地环境联调环境打通工具kt-connect
    Python学习指南
    Python爬虫(十九)_动态HTML介绍
    Python爬虫(十八)_多线程糗事百科案例
    Python爬虫(十七)_糗事百科案例
    Python爬虫(十六)_JSON模块与JsonPath
    python爬虫基本原理及入门
    Python操作数据库
    Python解析xml
  • 原文地址:https://www.cnblogs.com/wdw31210/p/10565457.html
Copyright © 2011-2022 走看看