Python中yield、xrange、生成器概念

  • 概述

    要理解yield,需要先理解生成器;

    要理解生成器,需要先理解迭代。

    逐个获取元素的过程,就是迭代

  • 函数中的return

    函数必须有一个返回值列于return之后,标志着函数的结束。一旦结束,那么这个函数中产生的一切变量都会被消除。

    其一个扩展功能:暂停函数,并返回当前坐在地方的值,当接收到继续的命令时继续向前。换个角度说,就是return返回一个值,并且记住这个返回的位置。

  • range()函数

    *range()*函数干的事情描述为:先给一个数,当消化完之后,再在前一个数的基础上拿出另一个数。

    range()函数的缺点是,会先生成一个list,然后从这个list第一个开始向后一个一个给出。生成list过程存在风险:如果数据量特别大,这个list就太大了。*xrange()*应运而生。

    xrange()是一个生成器(内部就包含了yield)。

    生成器,可以看作一个能够生成你所需要序列的函数。满足一种场景:记住当前的数、当前的地址,查看这个数是否符合要求,如果不符合,就继续从这个数、这个地址基础上计算下一个数。

  • yield

    yield的用法起源于对一般function中return的扩展。

    yield的作用就是把一个函数变成一个generator,Python解释器会把带有yield的函数视为一个generator。

    def function_name():
        print('函数内容')
        yield # 只要yield出现在函数内部,这个函数就被视为一个generator
    

    当采用yield,一个函数function_name被转化成generator之后,这个function_name就可以被用于for item in function_name语句上。

    functiongenerator的区别,在于*next()send()*这两个函数。

    简单理解,用生成器做迭代,只需要一个一个往后走,不需要像range()一样先建立一个可能很大而无用的索引。

  • Reference

  1. python 中 yield 用法的总结
  2. Improve Your Python: ‘yield’ and Generators Explained
发布了871 篇原创文章 · 获赞 1322 · 访问量 97万+

猜你喜欢

转载自blog.csdn.net/The_Time_Runner/article/details/105611453