for循环如何在python中实际工作

问题描述 投票:-1回答:2

我曾经认为python中的for-loop像这样它首先通过iter(iterable)进行迭代然后next(that_new_iterator_object)当它升高StopIteration时,for-loop结束并转到else块(如果提供)但这里的工作方式有所不同

>>> a = [1,2,3,4,5,6,7,8,9]
>>> for i in a:
        del a[-1]
        print(i)

1
2
3
4
5

其他数字在哪里6,7,8,9for循环创建的新迭代器对象与变量a不同

python python-3.x for-loop
2个回答
1
投票
迭代器对象拥有对该列表的引用,它不会复制该列表以进行迭代。

您正在缩短每次迭代的列表,当迭代器用完5个项目时,迭代器将退出。

(也就是说,在迭代过程中对一个可迭代对象进行突变不是一个好习惯;如果您这样做,dict会直接抱怨。)


1
投票

for循环的工作与您描述的一样。但是,以下是[[list iterator的工作原理:

class ListIterator: def __init__(self, lst): self.lst = lst self.idx = 0 def __iter__(self): return self def __next__(self): if self.idx >= len(self.lst): raise StopIteration else: val = self.lst[self.idx] self.idx += 1 return val IOW,迭代器取决于您要修改的列表。
© www.soinside.com 2019 - 2024. All rights reserved.