yield用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了yield用法相关的知识,希望对你有一定的参考价值。

参考技术A yield的作用主要是创建生成器 generator, 生成器也是用于迭代的,想对于普通迭代对象如list 来说,生成器不会事先生成所有的集合元素,而是边迭代边生成,占用内存更少。
如果一个函数里不是用return来返回数据,而是用yield来返回数据,那么这个函数就是生成器,注意,yield关键字只能用在函数体里面

上面generator()函数就是使用了yield的生成器,它和itertor()函数的区别就是它不会真的生成一个长度为一百万的序列,而只是记录了这一百万个数据的生成方式,所以它占用内存很少。而itertor()函数使用的使用的range(1000000)则真的会生成一百万个元素在列表里(注:python2里range是直接生成元素,python3里range则也变成了生成器)。

在迭代生成器的时候,每次遇到yield i 会返回i, 然后迭代器函数就在yield的地方暂停运行,线程切换到调用处,在调用处进入下一次for 循环时,线程又切回到生成器函数上次yield的地方继续运行。其实在线程切回到yield的时候可以传递参数给生成器

之前的生成器是通过for 循环遍历的,其实for 循环的本质就是不停的next(generator)输出下一个元素,直到遍历结束。上面的例子就是使用next函数来调用的,在generator2里yield空值,然后线程跳到了g2.send(1),send的作用就是让线程带了一个参数回到生成器里面,这个参数传给了new,然后生成器继续执行。

yield from 基本的用法是代替for 循环,yield一个可迭代对象

上面的yield from 就是简化了for循环的yield语句。

yield from 还可以接受生成器的返回值,我们知道生成器是通过yield来返回值的,return的值是无法通过for 迭代生成器来获得的,var = yield from 可以获取return

yield from 还有一个高级的用法,就是协程,后面介绍

python yield的用法

1 yield作为函数的返回值

当yield作为函数的返回值的时候,函数的返回就是一个iterator了,这个时候就可以用next函数遍历了。

yield每次会返回一个值,next会去取下一个值,直到遍历完yield生成的最后一个值为止。

而python的for循环本身就自带这个一个next函数。

所以:

for i in “yield的函数的返回值”:

  print i

会对应打印yiled每次返回的值。

非常好用的用法。

以上是关于yield用法的主要内容,如果未能解决你的问题,请参考以下文章

Python异步编程02--yield用法

Python yield的用法

python yield的用法

python yield from用法

yield用法

C#中yield return用法