谈谈 Python 中的 for 循环(1)

总忘记for语句的原理,属文记之

前置知识

可迭代对象

对于任何一个实现了 __iter__ 方法的对象,我们称之为可迭代对象

迭代器对象

当调用可迭代对象的 __iter__方法,它会返回一个迭代器对象;

迭代器对象是已经实现了 __next__ 方法的对象

StopIteration异常

当调用迭代器对象的 __next__ 方法而无下一个元素时,它会抛出 StopIteration 异常

魔法方法

以双下划线开头和结尾的方法;

一般而言,对于对象 object_xyz 魔法方法 __abc__ ,其调用方式为 abc(object_xyz)

整体流程

在上述前置知识和一定的 python 基础下,我们来看这段代码:

test_case = [1, 2, 3, 4]

# A
try:
    iterator = iter(test_case)
    while True:
        x = next(iterator)
        print(x)  
except StopIteration as e:
    pass

# B
for x in test_case:
    print(x)

代码段 A 即为代码段 B(也就是一段 for 循环语句)的实现:

首先获取可迭代对象的迭代器对象,然后对迭代器对象不断地调用 next()方法直到抛出 StopIteration 异常。