Difference between 'for a[-1] in a' and 'for a in a' in Python?

会有一股神秘感。 提交于 2021-02-16 13:36:06

问题


In this post, the following code snippets could work.

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

Refer to this 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].

Likewise, I think doing for a in a, it should iterate through the list and temporary store the value of current element to a, so the value of a could be 0, and is not iterable, then TypeError exception will be thrown in the next iteration. However, the result is as below.

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

How to understand it?


回答1:


Quoting the 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.

So, when you are iterating an object, an iterator object is created and that is used for iteration. That is why the original object is not lost, at least till the loop runs.

In your case, when for a in a: is executed, an iterator object is created for a first, and the values are retrieved from the iterator object. Even though the loop binds the name a to some other value on each iteration, the iterator object still holds reference to the original list object and it gives out values from it. That is why you are not getting any error.



来源:https://stackoverflow.com/questions/34706506/difference-between-for-a-1-in-a-and-for-a-in-a-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!