编程语言
首页 > 编程语言> > Python中’for a中的[-1]和’中a’之间的区别?

Python中’for a中的[-1]和’中a’之间的区别?

作者:互联网

在此post中,以下代码片段可以正常工作.

a = [0, 1, 2, 3]
for a[-1] in a:
    print(a[-1])

参见本answer

While doing for a[-1] in a, you actually iterate through the list and temporary store the value of the current element into a[-1].

同样,我认为在a中做一个,它应该遍历列表并临时存储当前元素的值为a,因此a的值可能为0,并且不可迭代,那么下一次将抛出TypeError异常迭代.但是,结果如下.

>>> a = [0, 1, 2, 3]
>>> for a in a:
...     print a
... 
0
1
2
3
>>> a
3

怎么理解呢?

解决方法:

引用official documentation on for loop,

An iterator is created for the result of the expression_list. The suite is then executed once for each item provided by the iterator, in the order of ascending indices.

因此,当您迭代对象时,会创建一个迭代器对象并用于迭代.这就是为什么原始对象不会丢失,至少在循环运行之前.

在您的情况下,当执行a:中的a时,会为第一个创建迭代器对象,并从迭代器对象中检索这些值.即使循环将名称a绑定到每次迭代的某个其他值,迭代器对象仍然保持对原始列表对象的引用,并从中提供值.这就是为什么你没有收到任何错误.

标签:python,for-loop,python-internals
来源: https://codeday.me/bug/20190628/1313318.html