yield是python 2.2之后引入的statement,这个语句的功能就是生成一个generator 函数

  • 简单说,在(循环中)调用yield expresstion;当函数执行到这步的时候,所有stack变量会被保存,程序执行点会返回到这段代码的caller函数中,并且返回值等于expresstion的值。
  • “在循环中”只所以用大括号,是因为这个不是必须条件,但是yield如果不处于循环中被使用,保存在stack中的值不容易变化,这段话可能不太好理解,看代码很直观。先准备两个函数

    for x in gen():
        print x
    for x in gen2():
        print x

  • 实际上,所有通过调用yield而构造出来的generator 函数,都可以改写为用一个list保存所有的中间结果,然后返回这个列表的函数形式 哪yield有什么存在的必要呢?想想他们之间的唯一区别,就是yield可以在每个中间结果产生的时候都返回一次,而使用list保存中间结果,必须等到所有的数据计算完毕才能返回,那么在如下两种情况,就能够用到yield的特点了

  • 中间计算非常费时间,哪没有必要等到全部结果都算出来,这个对于IO操作相关的程序特别有用,比如从网络查询数据,可以把整个查询过程封装成一个generator 函数,得到一条数据就返回一条中间结算数据量很大,或者结果未知

本文地址: http://lutaf.com/19.htm 鲁塔弗原创文章,欢迎转载,请附带原文链接