python 生成器
2016-07-13 10:41
393 查看
摘自:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00138681965108490cb4c13182e472f8d87830f13be6e88000
前面说了列表生成式,那么生成器怎么做呢
第一种方法,因为前面我们的列表生成式是用[]表示的,所以这里我们把【】换成()就行了
生成器保存的是算法
比如说我们的列表生成式是
k = 【x*x for x in range(5)】
那么我们的生成器就是
g =(x*x for x in range(5))
我们怎么调用这个生成器中的元素呢
一个是使用next()
>>> g = (x*x for x in range(5))
>>> g.next()
0
>>> g.next()
1
>>> g.next()
4
>>> g.next()
9
但是在实际生产中我们要是调用生成器中的元素的话,我们就使用for循环来迭代
g =(x*x for x in range(5))
for i in g:
print i
还有一种方法就是在函数中定义yield关键字
这种方法就是用yield关键字了,就像高中的根据规则,推断出函数一样,我们这里只是在里面加了一个yield
比如说这里的斐波那契函数
def fib(max):
n,a,b = 0,0,1
while n < max:
# print b
yield b
a,b = b,a+b
n = n+1
要理解generator的工作原理,它是在
前面说了列表生成式,那么生成器怎么做呢
第一种方法,因为前面我们的列表生成式是用[]表示的,所以这里我们把【】换成()就行了
生成器保存的是算法
比如说我们的列表生成式是
k = 【x*x for x in range(5)】
那么我们的生成器就是
g =(x*x for x in range(5))
我们怎么调用这个生成器中的元素呢
一个是使用next()
>>> g = (x*x for x in range(5))
>>> g.next()
0
>>> g.next()
1
>>> g.next()
4
>>> g.next()
9
但是在实际生产中我们要是调用生成器中的元素的话,我们就使用for循环来迭代
g =(x*x for x in range(5))
for i in g:
print i
还有一种方法就是在函数中定义yield关键字
这种方法就是用yield关键字了,就像高中的根据规则,推断出函数一样,我们这里只是在里面加了一个yield
比如说这里的斐波那契函数
def fib(max):
n,a,b = 0,0,1
while n < max:
# print b
yield b
a,b = b,a+b
n = n+1
小结
generator是非常强大的工具,在Python中,可以简单地把列表生成式改成generator,也可以通过函数实现复杂逻辑的generator。要理解generator的工作原理,它是在
for循环的过程中不断计算出下一个元素,并在适当的条件结束
for循环。对于函数改成的generator来说,遇到return语句或者执行到函数体最后一行语句,就是结束generator的指令,
for循环随之结束。
相关文章推荐
- Python多进程并发(multiprocessing)
- Python新手学习基础之数据类型——数字类型
- Faster R-CNN安装笔记,只用CPU
- 关于Python中的for循环控制语句
- 无监督机器学习--Ipython notebook
- python中的短路运算
- python 遍历文件夹
- python学习——实例属性和类属性
- python学习——获取对象信息
- python学习——继承和多态
- python学习——访问限制
- python学习——类和实例
- Python爬虫实践:获取空气质量历史数据
- python学习——面向对象编程
- Chapter4~Python对象
- Python笔记(2)函数
- Python学习(6)
- Python学习(5)
- 如何在MAC和WINDOWS平台下安装Python第三方库
- 使用python实现多渠道打包