python中的迭代器和生成器
来源:互联网 发布:贝叶斯学派全知理论 编辑:程序博客网 时间:2024/06/05 23:42
迭代是访问如列表,元组,字典,字符串等对象中的元素的一种方式迭代器是⼀个可以记住遍历的位置的对象。迭代器对象从集合的第⼀个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
迭代器
In [24]: dir(list)
Out[24]:
[‘add‘, ‘class‘, ‘contains‘, ‘delattr‘,
‘delitem‘, ‘dir‘, ‘doc‘, ‘eq‘, ‘format‘,
‘ge‘, ‘getattribute‘, ‘getitem‘, ‘gt‘,
‘hash‘, ‘iadd‘, ‘imul‘, ‘init‘, ‘iter‘,
‘le‘, ‘len‘, ‘lt‘, ‘mul‘, ‘ne‘, ‘new‘,
‘reduce‘, ‘reduce_ex‘, ‘repr‘, ‘reversed‘,
‘rmul‘, ‘setattr‘, ‘setitem‘, ‘sizeof‘,
‘str‘, ‘subclasshook‘, ‘append’, ‘clear’, ‘copy’,
‘count’, ‘extend’, ‘index’, ‘insert’, ‘pop’, ‘remove’,
‘reverse’, ‘sort’]
上面是一个列表的所有属性,其中有一个_iter_方法,⼀个具备了 iter ⽅法的对象,就是⼀个可迭代对象。字典,元组,字符串都是可迭代对象,可迭代对象通过 iter ⽅法向我们提供⼀个迭代器,我们在迭代⼀个可迭代对象的时候,实际上就是先获取该对象提供的⼀个迭代器,然后通过这个迭代器来依次获取对象中的每⼀个数据。
In [29]: li = iter(a)
In [30]: type(li)
Out[30]: list_iteratorIn [31]: dir(li) Out[31]: [‘class‘, ‘delattr‘, ‘dir‘,
‘doc‘, ‘eq‘, ‘format‘, ‘ge‘, ‘getattribute‘,
‘gt‘, ‘hash‘, ‘init‘, ‘iter‘, ‘le‘,
‘length_hint‘, ‘lt‘, ‘ne‘, ‘new‘, ‘next‘,
‘reduce‘, ‘reduce_ex‘, ‘repr‘, ‘setattr‘,
‘setstate‘, ‘sizeof‘, ‘str‘, ‘subclasshook‘]
li是可迭代对象,通过iter()函数获得列表的迭代器,其中有_next_方法,通过这个方法就可以不断获取列表中的下一个元素
In [35]: a = [1,2,3,4,5,6]
In [36]: li = iter(a)
In [37]: next(li)
Out[37]: 1
In [38]: next(li)
Out[38]: 2
In [39]: next(li)
Out[39]: 3
In [40]: next(li)
Out[40]: 4
In [41]: next(li)
Out[41]: 5
In [42]: next(li)
Out[42]: 6
所以一个具备了_iter_方法和_next_方法的对象就是一个迭代器,所以如果需要写一个迭代器,需要具备这两个方法才能构成迭代器。从中就可以看出for循环的本质:通过iter()函数得到可迭代对象的迭代器,然后不断调用next()方法来取得下一个值,当遇到异常时,循环结束。
生成器
如果我们需要自定义一个迭代器,自己定义一个迭代器较为麻烦,所以有一种较为简单的语法即生成器,生成器是一种特殊的迭代器
生成器的创建方法有以下几种
1 只要把⼀个列表⽣成式的 [ ] 改成 ( )
In [15]: L = [ x*2 for x in range(5)]
In [16]: L
Out[16]: [0, 2, 4, 6, 8]
In [17]: G = ( x*2 for x in range(5))
In [18]: G
Out[18]:
- python中的生成器和迭代器
- python中的迭代器和生成器
- Python中的迭代器和生成器
- python中的生成器和迭代器
- python中的生成器和迭代器
- python中的迭代器和生成器
- python中的迭代器和生成器
- python中的迭代器和生成器学习
- 深入讲解Python中的迭代器和生成器
- python迭代器和生成器
- Python 迭代器和生成器
- Python 迭代器和生成器
- Python迭代器和生成器
- Python迭代器和生成器
- python迭代器和生成器
- Python迭代器和生成器
- python迭代器和生成器
- python 迭代器和生成器
- No space in execution regions with .ANY selec错误的解决
- 数据流处理器类
- 算法之堆排序
- Mysql修改密码
- C++中 Unicode 与 UTF-8 编码互转
- python中的迭代器和生成器
- 对抗博弈 alpha-beta剪枝
- spark源码学习(十五)--- application注册机制分析
- 51nod1605 博弈
- 算术运算符
- 实模式和保护模式
- 彻底弄懂HTTP缓存机制及原理
- 数据结构与算法的基础概念
- HashSet存储元素保证唯一性的代码及图解