Python之生成器/迭代器
2017-09-21 10:41
337 查看
生成器:
利用 () 创建generator:>>> a = [x*x for x in range(10)] #列表生成式 >>> a [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] >>> b = (x*x for x in range(10)) #用 () 创建一个generator >>> b <generator object <genexpr> at 0x7f62455db258> >>> next(b) #利用 next()调用,一次只计算一个值 0 >>> next(b) 1 >>> for y in b: #利用for遍历generator,比较常用 ... print(y) ... 4 9 16 25 36 49 64 81 >>>
tips:next()调用generator当没有更多元素时会抛出
StopIteration的错误,用for遍历不会
当函数定义中含有
yield关键字时,该函数就是一个generator,以斐波拉契数列为例:
>>> def fib(max): ... n, a, b = 0, 0, 1 ... while n < max: ... yield b #yield关键字 ... a, b = b, a + b ... n = n + 1 ... >>> f = fib(10) >>> f #generator类型 <generator object fib at 0x7f62455db360> >>> for x in f: ... print 4000 (x) ... 1 1 2 3 5 8 13 21 34 55
迭代器 :
凡是可作用于for循环的对象都是Iterable类型;凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;
集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。
Python的for循环本质上就是通过不断调用next()函数实现的,例如:
for x in [1, 2, 3, 4, 5]: pass
实际上完全等价于:
# 首先获得Iterator对象: it = iter([1, 2, 3, 4, 5]) # 循环: while True: try: # 获得下一个值: x = next(it) except StopIteration: # 遇到StopIteration就退出循环 break
以上内容摘抄自于廖雪峰的官方网站-Python教程
相关文章推荐
- 完全理解 Python 迭代对象、迭代器、生成器
- 自学Python4.2-迭代器、生成器
- Python3 迭代器与生成器
- Python语言基础学习(数据类型,迭代器及生成器)
- Python的列表推导式、迭代器、生成器
- 完全理解 Python 迭代对象、迭代器、生成器
- Python迭代器和生成器介绍
- python iterator(迭代器) and generator(生成器)
- python知识点:迭代器和生成器
- Python迭代器与生成器实例演示
- python 迭代器与生成器 详解
- 完全理解Python迭代对象、迭代器、生成器
- 零基础学python-19.8 生成器表达式:当迭代器遇上列表解析
- python学习 生成器 列表生成式 迭代器
- Python之列表生成式、生成器、可迭代对象与迭代器
- Python 生成器与迭代器
- Python生成器与迭代器
- python中的迭代器和生成器学习
- python 可迭代对象,迭代器,生成器
- Python学习(三):迭代器、生成器、装饰器、递归、算法、正则