Chinaunix首页 | 论坛 | 博客
  • 博客访问: 152395
  • 博文数量: 69
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 595
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-16 00:00
个人简介

宁可逆流而上与众不同,也不顺风顺水随波逐流

文章分类

全部博文(69)

文章存档

2020年(1)

2018年(9)

2017年(43)

2016年(16)

我的朋友

分类: Python/Ruby

2016-12-02 20:50:13

在列表生成式中一旦创建一个列表那么将会创建所有元素,往往我们只需要几个,这极大浪费了内存空间。生成器就是为解决这种情况诞生的。它是一边计算一边生成元素的,一旦你不再i需要,它就不会计算后续元素

创建方式:
列表生成式中把列表的中括号改为圆括号:
  1. L=[x*x for x in range(1,11)] #列表
  2. L=(x*x for x in range(1,11)) #生成器
函数中包含yield关键字:
    当函数中包含yield关键字时就不再是普通的函数,而是generator。

点击(此处)折叠或打开

  1. def fib(max):
  2.     n,a,b=0,0,1
  3.     while n<max:
  4.         yield b  #注意此处,利用此生成器输出时yield等同于print
  5.         a,b=b,a+b
  6.         n=n+1
  7.     return 'done'
调用方式:
通过next()函数调用:
  1. next(L) #L是利用列表生成式创建的generator

  2. a=fib(6)
  3. next(a) #函数方式的generator
当generator是利用函数创建时调用一次next()函数执行到有yield的一行就结束,不会继续往下执行,再次调用时它会接着往下执行,而不是从头执行

通过for循环调用:
  1. for n in generator: #此处的generator处可以用任何生成器代替
  2.     print n

还需补充如何获取被创建为生成器的函数的返回值

生成器方法:
    在python2.5及以后的的版本中生成器共有三种方法,send(),throw(),close()。


阅读(423) | 评论(0) | 转发(0) |
0

上一篇:列表生成式

下一篇:迭代器

给主人留下些什么吧!~~