• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

竹千代

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

生成器

生成器是generator,就是指带有关键字yield的函数。

它与一般函数不同点在于:

  1、函数调用返回迭代子iterator,迭代子可以理解为一系列的值

>>> def func():
...     yield 1
...
>>> a = func()
>>> a
<generator object func at 0x01786918>

  2、迭代子每次只能拿到一个值,若想拿下一个值,通过调用next;对于for循环,next是被隐式调用

  3、每次调用next是从上一个yield处开始执行,而且现场环境是和上一次相同

相同点在于:

  1、yield类似return

 

应用场景:

由于生成器产生值的方法是每次只产生一个,不停调用next,才会继续产生后面的。所以,它特别适用于产生一系列数量非常多的值。

  1、配合while True之类的,可以产生无限个数

def get_primes(number):
    while True:
        if is_prime(number):
            yield number
        number += 1

  2、配合阻塞函数,可以产生停动停动的模型

def func():
    xx.read(block=True)
    .......
    yield n

for i in func():
    .......

 

参考:https://www.jeffknupp.com/blog/2013/04/07/improve-your-python-yield-and-generators-explained/

 

posted on 2015-09-08 17:23  竹千代  阅读(215)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3