迭代:是通过重复执行代码来处理相似数据集的过程,本次迭代的处理数据依赖于上一次的结果,并继续这样做。上次产生的结果是下一代结果的初始状态。如果中途有任何停顿都不是迭代。例如:
(1)非迭代例子
loop = 0
while loop < 3:
print("Hello world!")
loop += 1
(2)迭代例子
loop = 0
while loop < 3:
print(loop)
loop += 1
示例1只循环了3次就输出了“Hello world!”,而且输出的数据不依赖于之前的数据,所以不是分代的。
在python中,for...in通常用于遍历元组、列表和字典。而 for ... in 需要后面那个可迭代的对象。那么什么是python中的可迭代对象呢?
在python中
(1)可迭代对象(iterable),是指拥有了__iter__的内置方法的对象。
(2)迭代器(iterator) ,是指拥__iter__与__next__方法的对象。
这里__iner__需要返回一个迭代器对象,而__next__方法可以取出值并停留在取值的位置,以便取出下一个值。
从这里可以看出,迭代器一定是可迭代对象,可迭代对象不一定是迭代器。
在python中,可以使用isinstance(object, Iterable)来判断一个对象是否为可迭代对象。使用 isinstance(object,Iterator) 判断对象是否为迭代器。
In [1]: from collections import Iterable
In [2]: from collections import Iterator
In [3]: isinstance(1,Iterable)
Out[3]: False
In [4]: isinstance(1,Iterator)
Out[4]: False
In [5]: isinstance((1,2),Iterable)
Out[5]: True
In [6]: isinstance((1,2),Iterator)
Out[6]: False
In [7]: class D():
...: def __iter__(self):
...: pass
...: def __next__(self):
...: pass
...:
In [8]: d = D()
In [9]: isinstance(d,Iterator)
Out[9]: True
In [10]:
python实现迭代:列如,用迭代实现斐波那契数列:
class Fibonacci(object):
def __init__(self,all_num):
"""初始化类属性"""
#定义一个实例属性,存放要实现斐波那契数列的个数
self.all_num = all_num
#定义count实例属性,作为迭代的退出条件判断
self.count = 0
#实现斐波那契数列定义a=0,b=1
self.a = 0
self.b = 1
def __iter__(self):
"""在这里self所指3对象本身是一个
迭代器,所以可以返回自身
"""
return self
def __next__(self):
"""
next,实现迭代返回结果
"""
#判断输出的数列个数,是否小于需要的数列个数
if self.count < self.all_num:
#rect最终要输出的斐波那契数列
rect = self.a
#在这里重复让a=b,b=a+b,来实现斐波那契数列
self.a, self.b = self.b, self.a + self.b
self.count += 1
return rect
else:
#当迭代遇到StopIteration异常时便会停止迭代
raise StopIteration
fibonacci = Fibonacci(10)
for fibo_num in fibonacci:
print(fibo_num)
迭代:数据存储是通过存储一种生成的方式来实现的,而不是存储生成的结果。从而大大节省存储空间。
注意:
在python2.x中,range()函数后面存储了一个list,xrange()中存储了一个可迭代对象。在python3.x中,range()存储的是一个迭代对象,相当于python2.x中的xrange()。
众多
视频,尽在python学习网,欢迎在线学习!
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 学习python要看哪些书12/25
- ♥ 如何在python中实现单向链表01/02
- ♥ 如何使用python终端窗口09/22
- ♥ 如何在python中添加行号11/16
- ♥ 如何区分python中的小数和整数09/24
- ♥ 以列表为参数的python函数有哪些?01/08
内容反馈