标签:对象 object 位置 log 判断 概念 迭代 sel name
迭代器的概念:
迭代是访问元素的一种方式。迭代器是一个可以集中遍历位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有元素被访问结束。迭代器只能往前不能往后
可迭代对象:
可以通过for ...in .... 这类语句迭代读取一条数据供我们使用的对象称之为可迭代对象(itrable)
判断方法:
from collections import Iterable
isinstance([],iterable) # True
可迭代对象的本质:
向使用者提供了一个记录访问数据,返回下一条数据的迭代器。(具备__iter__方法的对象就是一个可迭代对象)
判断对象是否是迭代器:
from collections import Iterator
isinstance([],Iterator) # False
isinstance(iter([]),Iterator) # True
迭代器对象Iterator
一个实现了 __iter__方法和 __next__ 方法的对象是迭代器
for... in ... 循环的本质
for item in Iterable 循环的本质就是先通过iter()函数获取可迭代对象Iterable的迭代器,然后对获取到的迭代器不断调用next()方法来获取下一个值并将其赋值给item,当遇到StopIteration的异常后循环结束。
迭代器的应用(斐波那契数列)
class FibIterator(object): def __init__(self, n): # 要求的前n个fiber数列 self.n = n # 初始值 self.num1 = 0 self.num2 = 1 # 记录下一个数字是否到需要结束 self.current = 0 def __next__(self): if self.current < self.n: num = self.num1 self.num1, self.num2 = self.num2, self.num1 + self.num2 self.current += 1 return num else: raise StopIteration def __iter__(self): return self if __name__ == ‘__main__‘: fib = FibIterator(10) # print(isinstance(fib, Iterator)) print(fib) for x in fib: print(x, end=‘ ‘)
除了for循环能接收可迭代对象,list、tuple等也能接收可迭代对象:
li = list(FibIterator(15))
print(li)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
tp = tuple(FibIterator(6))
print(tp)
(0, 1, 1, 2, 3, 5)
标签:对象 object 位置 log 判断 概念 迭代 sel name
原文地址:http://www.cnblogs.com/maxiaohei/p/7794508.html