python的迭代器理解
2017-09-20 17:11
106 查看
在python中可以使用列表生成式,来生成指定关系的列表元素,同样的在python中有生成器,使用’()’来取代列表生成式中的’[]’,或者在函数中使用yeild的,就可以调用next方法来输出下一个序列的元素,当然这几个方法元素个数都是有限的。在python中可以使用迭代器来不断地获取下一个元素。
在python中像列表这种可以使用for循环遍历其中元素的对象叫做可迭代对象(iterable)。
对于迭代器而言其实需要定义的就是它的next方法,我们可以使用内置的iter()函数让可迭代对象成为一个迭代器。如下
但是如果继续使用next方法会出现以下错误。
其实iterator继承自iterable,但是有了自己的next方法,可以调用输出下一个元素的。
iterable需要包含有iter()方法用来返回iterator,而iterator需要包含有next()方法用来被循环。
如果需要自己来定义一个迭代器的话,需要在类里面定义一个 iter() 函数,用它来返回一个带 next() 方法的对象。
比如说斐波拉契的数列可以这样写
然后测试输出数列的前十个数。
但是需要注意的是,迭代器如果可迭代对象是有限的迭代完了就不能再次使用了。
在python中像列表这种可以使用for循环遍历其中元素的对象叫做可迭代对象(iterable)。
对于迭代器而言其实需要定义的就是它的next方法,我们可以使用内置的iter()函数让可迭代对象成为一个迭代器。如下
a=[1,2,3,4,5,6,7,8,9,10] a=iter(a) for i in range(10): print a.next()
但是如果继续使用next方法会出现以下错误。
File "/Users/zyc/PycharmProjects/python1/TEST3.py", line 5, in <module> print a.next() StopIteration
其实iterator继承自iterable,但是有了自己的next方法,可以调用输出下一个元素的。
iterable需要包含有iter()方法用来返回iterator,而iterator需要包含有next()方法用来被循环。
如果需要自己来定义一个迭代器的话,需要在类里面定义一个 iter() 函数,用它来返回一个带 next() 方法的对象。
比如说斐波拉契的数列可以这样写
class Iterable: def __iter__(self): return self def __init__(self): self.start = 1 self.pre=[1] def next(self): self.pre.append(self.start) self.start=self.pre[-1]+self.pre[-2] return self.start I = Iterable() for i in range(10): print I.next()
然后测试输出数列的前十个数。
但是需要注意的是,迭代器如果可迭代对象是有限的迭代完了就不能再次使用了。
相关文章推荐
- 完全理解 Python 迭代对象、迭代器、生成器
- python学习笔记--可迭代对象和迭代器的理解
- 完全理解Python迭代对象、迭代器、生成器
- 【python】理解迭代器及yield
- 【python】14、完全理解可迭代对象、迭代器、生成器
- 完全理解 Python 迭代对象、迭代器、生成器
- 【Python】迭代器和生成器理解
- 理解Python迭代对象、迭代器、生成器
- python的迭代器iterator和生成器generator(关键字yield)的简单理解
- 彻底理解Python迭代器
- 完全理解Python迭代对象、迭代器、生成器
- 完全理解 Python 迭代对象、迭代器、生成器
- python yield generator (迭代器 生成器 协程) 理解
- 完全理解Python迭代对象、迭代器、生成器
- 完全理解Python迭代对象、迭代器、生成器
- 迭代器就是重复地做一些事情,可以简单的理解为循环,在python中实现了__iter__方法的对象是可迭代的,实现了next()方法的对象是迭代器,这样说起来有
- 完全理解PYTHON迭代对象、迭代器、生成器
- 完全理解 Python 迭代对象、迭代器、生成器
- 深入理解Python迭代器与生成器
- 完全理解 Python 迭代对象、迭代器、生成器