在python中,有两种循环模式:for循环和while循环。while循环的实现非常简单。它的本质是一个条件语句,一个自定义的条件,当条件满足时,while代码块就不断的执行。但是for循环呢?说到for循环,那就不得不说说迭代了。python中有两种迭代对象:迭代器对象(Iterator)和可迭代对象(Iterable)。tips:如何判断一个对象是迭代器对象还是可迭代对象?fromcollectionsimportIterable,Iteratorisinstance(object,class),第一个参数是对象,第二个参数是类名;返回值为True,即对象为:1.可迭代对象很多python数据类型都是可迭代对象:列表、字典、元组、字符串等a=[1,2,3]isinstance(a,Iterable)#True注意:可迭代对象不是迭代器对象2.迭代器对象迭代器对象依赖iter(args)方法实现,参数args必须是一个可迭代对象。a=[1,2,3]b=iter(a)isinstance(b,Iterator)#Trueisinstance(b,Iterable)#True从这里可以看出迭代器对象也是一个可迭代对象。那么,这两个对象和for循环是什么关系呢?我们都知道迭代器对象实现了__next__()方法,可以不断调用该方法返回迭代器对象的每一个元素。for循环的对象必须是可迭代对象。在底层,所有可迭代对象都有一个内置的__iter__()方法,返回值是一个迭代器对象。至此,我们明白了,for循环本质上是调用可迭代对象的__iter__()方法,获取到该对象对应的迭代器对象,然后无限调用__next__()方法获取对象中的每一个元素。untilStopIteration异常,说明迭代器没有下一个元素,for循环自动处理异常跳出循环。
