我是靠谱客的博主 无奈小蝴蝶,最近开发中收集的这篇文章主要介绍yield generate python_python yield generator 详解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在python的函数(function)定义中,只要出现了yield表达式(Yield expression),那么事实上定义的是一个generator function, 调用这个generator function返回值是一个generator。

>>> def gen_example():

... print 'before any yield'

... yield 'first yield'

... print 'between yields'

... yield 'second yield'

... print 'no yield anymore'

...

>>> gen = gen_example()

>>> gen.next()    # 第一次调用next

before any yield

'first yield'

>>> gen.next()    # 第二次调用next

between yields

'second yield'

>>> gen.next()    # 第三次调用next

no yield anymore

Traceback (most recent call last):

File "", line 1, in

StopIteratio

调用gen_example方法并没有输出任何内容,说明函数体的代码尚未开始执行。当调用generator的next方法,generator会执行到yield 表达式处,返回yield表达式的内容,然后暂停(挂起)在这个地方,所以第一次调用next打印第一句并返回“first yield”。 暂停意味着方法的局部变量,指针信息,运行环境都保存起来,直到下一次调用next方法恢复。第二次调用next之后就暂停在最后一个yield,再次调用next()方法,则会抛出StopIteration异常。

因为for语句能自动捕获StopIteration异常,所以generator(本质上是任何iterator)较为常用的方法是在循环中使用.

generator function产生的generator与普通的function有什么区别呢

(1)function每次都是从第一行开始运行,而generator从上一次yield开始的地方运行

(2)function调用一次返回一个(一组)值,而generator可以多次返回

(3)function可以被无数次重复调用,而一个generator实例在yield最后一个值 或者return之后就不能继续调用了

References:

最后

以上就是无奈小蝴蝶为你收集整理的yield generate python_python yield generator 详解的全部内容,希望文章能够帮你解决yield generate python_python yield generator 详解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部