Python3的生成器
来源:互联网 发布:上班玩游戏 知乎 编辑:程序博客网 时间:2024/06/05 06:22
跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
列表推导式用中括号,生成器表达式用小括号
>>>[i for i in range(5)] #列表解析
>>>g = (i for i in range(5)) #小括号() #生成器表达式,不用yield的表达形式>>> type(g) #这是一个迭代对象<class 'generator'>>>>print(next(g)) #next(g)相当于g.__next__()0>>>print(next(g)) 1 >>>print(next(g)) #迭代到头是len(list(range(5)))2 #或者直接用sum迭代到头>>> sum(g)9>>> print(next(g)) #迭代到头再迭代生产会报错Traceback (most recent call last): File "<pyshell#6>", line 1, in <module> print(next(g))StopIteration
在 Python 中,使用了 yield 的函数被称为生成器(generator)。在调用生成器运行的过程中,每次遇到 yield 时,函数会暂停,并保存当前所有的运行信息,返回yield的值。在下一次执行 next()方法时,从当前位置继续运行。
生成器函数和普通函数定义类似,不过要有标志性语句:yeild,返回生成器,通过next进行断电式运行。
>>> def gener(): yield 3 >>> g=gener();type(g)<class 'generator'>>>> next(g)3>>> next(g)Traceback (most recent call last): File "<pyshell#12>", line 1, in <module> next(g)StopIteration
>>> def gen_test(): while True: yield 3 print('once time')>>> g=gen_test() #生成器对象g>>> type(g)<class 'generator'>>>> next(g) #生成器执行到yield暂停,并返回yield值3>>> next(g) #生成器从暂停处开始执行,到下一个yield执行完停止once time3>>> next(g)once time3
下面例子对比上面例子,区别yield&print和yield&return连用的结果,形象化理解生成器的yield执行层级
>>> def gen_test1(): while True: yield 3 return "stop" >>> g1=gen_test1()>>> type(g1)<class 'generator'>>>> next(g1)3>>> next(g1) #从上一次yield停止处执行returnTraceback (most recent call last): File "<pyshell#13>", line 1, in <module> next(g1)StopIteration: stop
以下实例使用 yield 实现斐波那契数列:
import sys def fibonacci(n): #生成器函数————斐波那契 a,b,counter=0,1,0 while True: if (counter>n): return yield a #yield在return后,先不报错返回,在停止 a,b=b,a+b counter +=1f=fibonacci(10) #f是一个迭代器,由生成器返回生成 while True: try: print (next(f), end=" ") #next()调用生成器 except StopIteration: #异常提示 sys.exit()>>>0 1 1 2 3 5 8 13 21 34 55
阅读全文
0 0
- Python3的生成器
- python3的迭代器和生成器
- python3 生成器
- Python3 迭代器与生成器
- Python3 迭代器与生成器
- Python3 迭代器与生成器
- python3迭代器生成器
- Python3之生成器
- Python3之生成器
- python3-迭代器与生成器
- Python3 迭代器与生成器
- Python3 迭代器与生成器
- python3 迭代器与生成器
- 我的Python3.0笔记之容器,迭代器,生成器
- 我的python3基础笔记之 【生成器 generator】 05
- Python3.4.3中yield 生成器
- Python3学习笔记-迭代器&生成器
- python3中的迭代器与生成器
- hz2016评测提交常见问题
- Java IO FileWriter
- 【Python-3.3】遍历字典键值练习
- Vue项目
- 高数 下 笔记
- Python3的生成器
- 数字矩阵
- Java IOException
- LeetCode Algorithm #14 Longest Common Prefix
- Hibernate 一对多关联映射& 多对多管理映射
- 装配Bean——通过java代码装配bean
- 【OpenCV入门教程之六】 创建Trackbar & 图像对比度、亮度值调整
- 连续子数组的最大和
- DS1302时钟芯片驱动程序