Python 中 生成器、迭代器、可迭代对象 的概念
2018-02-12 17:46
756 查看
生成器
在 Python 中,一边循环一边计算的机制,称为 生成器(generator)可以通过 next() 函数获得 generator 的下一个返回值
生成器 的两种表示方法:
1、将列表生成式的 [ ] 改为 ( )
[2*x for x in range(10)] => (2*x for x in range(10))
2、使用 yield 关键字
以裴波拉切数列为例
In [1]: def fib(max): # fib 是生成器函数 ...: n, a, b = 0, 0, 1 ...: while n < max: ...: yield b ...: a, b = b, a + b ...: n = n + 1 ...: return 'done' ...: In [2]: fib(5) # 具体的 fib(5) 才是生成器 Out[2]: <generator object fib at 0x05098CF0> In [3]: g = fib(5) In [4]: next(g) Out[4]: 1 In [5]: next(g) Out[5]: 1 In [6]: next(g) Out[6]: 2 In [7]: next(g) Out[7]: 3 In [8]: next(g) Out[8]: 5 In [9]: from inspect import isgeneratorfunction In [10]: isgeneratorfunction(fib) # 判断是否是 generator function Out[10]: True In [11]: import types In [12]: isinstance(fib(5), types.GeneratorType) # 判断是否是 generator Out[12]: True
迭代器,可迭代对象
能作用于 for 循环的都是 可迭代对象(Iterable),包括内置的 集合数据类型 和 生成器可以被 next() 函数调用并不断返回下一个值的对象称为 迭代器(Iterator)
生成器都是 Iterator对象,但 list、dict、str 虽然是 Iterable,却不是 Iterator
可以使用 iter() 将 Iterable 转换为 Iterator
In [13]: import collections In [14]: isinstance('abc', collections.Iterable) # 判断是否是 Iterable Out[14]: True In [15]: isinstance('abc', collections.Iterator) # 判断是否是 Iterator Out[15]: False In [16]: isinstance(iter('abc'), collections.Iterator) Out[16]: True
相关文章推荐
- Python可迭代对象,迭代器,生成器的区别
- 完全理解PYTHON迭代对象、迭代器、生成器
- 完全理解Python迭代对象、迭代器、生成器
- python生成器,可迭代对象,迭代器区别和联系
- 完全理解 Python 迭代对象、迭代器、生成器
- python迭代对象,迭代器,生成器,以及yield用法详解
- python中生成器和迭代器以及可迭代对象的区别
- 完全理解 Python 迭代对象、迭代器、生成器
- Python 可迭代的对象、迭代器和生成器
- Python3.可迭代对象_迭代器_生成器
- Python迭代对象、迭代器、生成器
- 【python】 可迭代对象、迭代器、生成器
- Python迭代器,可迭代对象,生成器
- 完全理解Python迭代对象、迭代器、生成器
- Python迭代对象、迭代器、生成器
- Python生成器、迭代器、可迭代对象
- 第八章 Python可迭代对象、迭代器和生成器
- 完全理解 Python 迭代对象、迭代器、生成器
- 完全理 4000 解 Python 迭代对象、迭代器、生成器
- 流畅的python第十四章可迭代的对象,迭代器和生成器学习记录