python的迭代器

迭代是指能够从序列中访问出素的一种方式,在我们遍历使用for...in...的对象都是可迭代对象。这里需要补充一点的是python中一切都是对象。

判断一个对象是否是可迭代对象可以通过instance函数:

像我们常用的列表,字典,字符串,集合,元组都是可迭代对象。 

那么我们是否可以自定义一个可迭代对象呢,答案是肯定的。

其实可迭代对象本质上是需要一个中间者即迭代器来帮助可迭代对象记录当前遍历的位置即下标,并且返回遍历出来的。而__iter__()方法就是用来返回一个迭代器,即my_iteration对象。通过next(my_iteration)获取下个元素。

那么返回了一个迭代器以后是如何取出遍历元素的呢,实际上for..in...先调用了可迭代对象中的__iter__方法来获得一个迭代器,然后用调用next来不断获取下一个值,直到没有返回值。当用next不断获取直到没有值可以获取的时候会抛出StopIteration异常。因为for..in..自动捕获了这个异常并pass了,所以遍历的过程不会出现异常。

因此,一个对象拥有__iter__方法就是一个可迭代对象,拥有__iter__和__next__方法就是一个迭代器。

那么迭代器具体有什么作用呢,这里编写一个能够生成斐波那契数列的迭代器为例。

时间: 2024-11-07 21:46:43

python的迭代器的相关文章

Python 生成器&迭代器

Python 生成器 带有 yield 的函数在 Python 中被称之为 generator(生成器),用斐波那契数列: def fab(max):     n, a, b = 0, 0, 1     while n < max:         yield b         a, b = b, a + b         n = n + 1 执行: 1 2 3 4 5 6 7 8 9 >>> for n in fab(5):     print n 1 1 2 3 5 简单地

python——iterator迭代器

Iterator(迭代器)模式又称Cursor(游标)模式,用于提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示.或者这样说可能更容易理解:Iterator模式是运用于聚合对象的一种模式,通过运用该模式,使得我们可以在不知道对象内部表示的情况下,按照一定顺序(由iterator提供的方法)访问聚合对象中的各个元素. A. 一个类里面,如果实现了  __iter__ 这个函数, 那这个类就是 “可迭代的” B. 如果它还实现了 next ( self ) ,那它就称为  

python 【迭代器 生成器 列表推导式】

python [迭代器  生成器  列表推导式] 一.迭代器 1.迭代器如何从列表.字典中取值的 index索引 ,key for循环凡是可以使用for循环取值的都是可迭代的可迭代协议 :内部含有__iter__方法的都是可迭代的迭代器协议 :内部含有__iter__方法和__next__方法的都是迭代器 print(dir([1,2,3])) lst_iter = [1,2,3].__iter__() print(lst_iter.__next__()) print(lst_iter.__ne

python之迭代器与生成器

python之迭代器与生成器 可迭代 假如现在有一个列表,有一个int类型的12345.我们循环输出. list=[1,2,3,4,5] for i in list: print(i) for i in 12345: print(i) 结果: Traceback (most recent call last): File "C:/Pycham/生成器与迭代器/test1.py", line 6, in <module> for i in 12345: TypeError:

【Python】迭代器

对迭代器和生成器的概念一直很混乱,总结一下: 迭代器: 1.所谓的迭代器,就是具有__next__()方法的对象: 2.__iter__()方法返回一个迭代器对象,这个对象必须具有__next__()方法: 3.一个实现了__iter__()方法的对象是可迭代的,一个实现了__next__()方法的对象是迭代器: 4.内置函数iter()从可迭代对象调用__iter__()方法,并返回一个迭代器对象: 5.内置函数next()调用__next__()方法,并向前推进: 6.for循环会自动调用内

Python的迭代器和生成器

先说迭代器,对于string.list.dict.tuple等这类容器对象,使用for循环遍历是很方便的就,在后台for语句对容器对象对象调用iteration()函数,这是python的内置函数,iter()会返回一个定义next()方法的迭代器对象,它在容器中逐个访问容器内元素,next()也是python的内置函数.在没有后续元素是,调用next()会抛出一个StopIteration异常 上面说的都是python自带的容器对象,它们都实现了相应的迭代器方法,自定义类的遍历怎么实现,方法是

python中迭代器和生成器的区别

1 #!/usr/bin/python 2 def power(values): 3 for value in values: 4 print "powing %s" % value 5 yield value 6 def add(values): 7 for value in values: 8 if value % 2 == 0: 9 yield value + 3 10 else: 11 yield value + 2 12 elements = [1, 4, 7, 9, 12,

Python在迭代器中删除列表元素

在迭代器中删除列表元素是非常危险的,因为迭代器是直接对列表的数据进行引用 把列表拷贝给迭代器,然后对原列表进行删除操作就没问题了 pos=turtle.move() for each_fish in fish[:]: if each_fish.move()==pos: #鱼儿被吃掉 turtle.eat() fish.remove(each_fish) print('有一条鱼被吃') Python的List的底层是实现是一个PyObject*数组.如果每次增加一个元素都扩张内存的话效率太低,在增

python基础-迭代器和生成器

一.递归和迭代 1.递归:(问路示例) 递归算法是一种直接或者间接地调用自身算法的过程.在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解. 2.迭代:简单理解为更新换代( 儿子生孙子的故事) 二.迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退) 2.可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个__iter_