可直接作用于for循环的数据类型如list、tuple、dict等统称为可迭代对象:Iterable。使用isinstance()可以判断一个对象是否是可迭代对象。
示例:
from collections import Iterable result = isinstance([],Iterable) print(result) result = isinstance((),Iterable) print(result) result = isinstance('python',Iterable) print(result) result = isinstance(213,Iterable) print(result)
结果为:
True True True False
可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。next()函数访问每一个对象,直到对象访问完毕,返回一个StopIteration异常。使用isinstance()可以判断一个对象是否是Iterator对象。
例如:
from collections import Iterator result = isinstance([],Iterator) print(result) result = isinstance((),Iterator) print(result) result = isinstance((x for x in range(10)),Iterator) print(result)
结果为:
False False True
所有的Iterable都可以通过iter()函数转化为Iterator。
当自己定义迭代器时,需要定义一个类。类里面包含一个iter()函数,这个函数能够返回一个带next()方法的对象。例如:
class MyIterable: def __iter__(self): return MyIterator() class MyIterator: def __init__(self): self.num = 0 def __next__(self): self.num += 1 if self.num >= 10: raise StopIteration return self.num
迭代器当一次迭代完毕后就结束了,在此调用便会引发StopIteration异常。如果想要将迭代器保存起来,可以使用复制的方法:copy.deepcopy():x = copy.deepcopy(y),不可使用赋值的方法,这样是不起作用的。
例题示范:
补全ListCalculate.py文件中的部分代码,具体要求如下:
当输入一个列表时,填入将列表List转换为迭代器的代码;
填入用next()函数遍历迭代器IterList的代码。
代码示例:
List = [] member = input() for i in member.split(','): result = i List.append(result) #请在此添加代码,将List转换为迭代器的代码 #********** Begin *********# IterList=iter(List) #********** End **********# while True: try: #请在此添加代码,用next()函数遍历IterList的代码 #********** Begin *********# num=next(IterList) #********** End **********# result = int(num) * 2 print(result) except StopIteration: break