我们在 Python 中使用 for 循环迭代时到底做了什么
转载请注明出处:https://blog.youkuaiyun.com/jpch89/article/details/85532979
-
使用
for循环迭代一般写成:for i in x: ... -
首先看
x是否实现了__iter__方法,这个方法的返回值是一个迭代器。- 如果
x实现了x.__iter__()方法,那么使用iter(x)得到x的迭代器it_x。 - 然后对迭代器
it_x不断地调用next(it_x),把每次返回的元素给i。 - 最终迭代器元素耗尽,捕获到
StopIteration异常,终止迭代。
- 如果
-
如果
x没有实现__iter__方法,那么看它是否实现了__getitem__方法。
(序列类型Sequence都实现了__len__和__getitem__方法,所以序列类型的对象都是可以用于for循环的。)- 如果实现了
__getitem__方法,那么开始把x[0]、x[1]、x[2]一直到x[len(x) - 1]不断地赋值给i
- 如果实现了

本文详细探讨了在Python中使用for循环迭代时的内部机制,包括检查对象是否实现__iter__方法来获取迭代器,以及如果没有__iter__方法则检查__getitem__方法进行序列迭代。文中通过实例解释了当对象同时实现__iter__和__getitem__时的调用优先级,以及未实现这两个方法时抛出的异常情况。
最低0.47元/天 解锁文章
1327

被折叠的 条评论
为什么被折叠?



