`
jjchen_lian
  • 浏览: 84376 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

python之yield用法

阅读更多

简单记录一下yield的用法,不说一堆的文字废话,直接从代码入手,下面的代码是摘自web.py框架中的代码

 

    def group(seq, size): 
        """
        Returns an iterator over a series of lists of length size from iterable.

            >>> list(group([1,2,3,4], 2))
            [[1, 2], [3, 4]]
            >>> list(group([1,2,3,4,5], 2))
            [[1, 2], [3, 4], [5]]
        """
        def take(seq, n):
            for i in xrange(n):
                yield seq.next()

        if not hasattr(seq, 'next'):  
            seq = iter(seq)
        while True: 
            x = list(take(seq, size))
            if x:
                yield x
            else:
                break
    

 web.py中很多这样风格的代码,十分的简洁精炼,代码从上往下执行,声明了一个take函数,然后进入if语句,刚开始seq只是一个列表,所以hasattr(seq,'next')为None,所以if not None成立,进入了seq=iter(seq),那么seq就变成了一个iter对象,然后进入while True循环,进行调用了take方法,其实这里虽然说是调用,但是实际上不会去执行take里面的代码,这个方法只是简单的返回了一个iterable 对象,list(iterable)会类似for循环来执行 fab 函数内部的代码并且返回iter.next()值,执行到 yield seq.next()时,take函数就返回一个迭代值,下次迭代时,代码从 yield seq.next()的下一条语句继续执行,所以list(iterable)将返回一个列表,if x成立,那么yield x返回迭代值。供list(group([1,2,3,4], 2))中的list进行迭代。

 

例如下面一个例子

 

 >>> for n in fab(5): 
 ...     print n 
 ... 
 1 
 1 
 2 
 3 
 5

 

def fab(max): 
    n, a, b = 0, 0, 1 
    while n < max: 
        yield b 
        # print b 
        a, b = b, a + b 
        n = n + 1 

 简单地讲,yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator,调用 fab(5) 不会执行 fab 函数,而是返回一个 iterable 对象!在 for 循环执行时,每次循环都会执行 fab 函数内部的代码,执行到 yield b 时,fab 函数就返回一个迭代值,下次迭代时,代码从 yield b 的下一条语句继续执行,而函数的本地变量看起来和上次中断执行前是完全一样的,于是函数继续执行,直到再次遇到 yield。

 

分享到:
评论

相关推荐

    python中yield的用法.docx

    python中yield的用法全文共3页,当前为第1页。python中yield的用法全文共3页,当前为第1页。python中yield的用法 python中yield的用法全文共3页,当前为第1页。 python中yield的用法全文共3页,当前为第1页。 Python...

    python-yield用法详解.pdf

    python方法 python_yield用法详解

    python中yield的用法详解——最简单,最清晰的解释

    主要介绍了python中yield的用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    初步解析Python中的yield函数的用法

    主要介绍了Python中的yield函数,yield函数是生成器中的一个常用函数,本文来自于IBM官方网站的开发者文档的翻译,需要的朋友可以参考下

    python中的yield使用方法

    今天在看其他同事的代码时,发现一个没使用过的python关键字 :yield  先问了一下同事,听他说了几句,有个模糊的印象,仅仅是模糊而已。于是自己去搜搜资料看。看了半天,逐渐清晰了。不过在工作机制以及应用上...

    python中yield的用法详解1

    1.程序开始执行以后,因为foo函数中有yield关键字,所以foo函数并不会真的执行,而是先得到一个生成器g(相当于一个对象) 2.直到调用next方法,fo

    Python yield 使用浅析

    本文将由浅入深地讲解 yield 的概念和用法,帮助读者体会 Python 里 yield 简单而强大的功能。 您可能听说过,带有 yield 的函数在 Python 中被称之为 generator(生成器),何谓 generator ? 我们先抛开 generator...

    Python协程 yield与协程greenlet简单用法示例

    本文实例讲述了Python协程 yield与协程greenlet简单用法。分享给大家供大家参考,具体如下: 协程 协程,又称微线程,纤程。英文名Coroutine。 协程是啥 协程是python个中另外一种实现多任务的方式,只不过比线程更...

    Python中Yield的基本用法

    带有yield的函数在Python中被称之为generator(生成器),也就是说,当你调用这个函数的时候,函数内部的代码并不立即执行 ,这个函数只是返回一个生成器(Generator Iterator)。 def generator(): for i in range(10...

    python3.6生成器yield用法实例分析

    主要介绍了python3.6生成器yield用法,结合实例形式分析了Python3.6中生成器yield的功能、用法及相关操作注意事项,需要的朋友可以参考下

    举例详解Python中yield生成器的用法

    yield是生成的意思,但是在python中则是作为生成器理解,生成器的用处主要可以迭代,这样简化了很多运算模型(还不是很了解是如何简化的)。 yield是一个表达式,是有返回值的. 当一个函数中含有yield时,它不再是一个...

    Python yield 使用方法浅析

    本篇文章主要介绍了Python yield 使用方法浅析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Python yield使用方法示例

    1. iterator叠代器最简单例子应该是数组下标了,且看下面的c++代码: ...上面的代码翻译成python:  复制代码 代码如下: array = [i for i in range(10)]for i in array: print i,  首先,array

    Python yield的用法实例分析

    主要介绍了Python yield的用法,结合实例形式分析了Python yield的基本功能、使用方法及操作注意事项,需要的朋友可以参考下

    浅析Python中yield关键词的作用与用法

    Python中关键字yield的作用是什么?...这篇文章就给大家详细介绍了Python中yield关键词的作用与用法,文中通过示例代码介绍的很详细,对大家学习python具有一定的参考借鉴价值,有需要的朋友们下面来一起学习学习吧。

Global site tag (gtag.js) - Google Analytics