Python for循环迭代使用相同的变量名称会引发错误

时间:2018-05-27 10:08:59

标签: python-3.x for-loop

我正在学习Python。我在使用Python 3.6.0 REPL时遇到了以下异常结果。

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

输出:

1
2
3

再次

输出:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable

我可以看到'a'的价值。

>>>a
3

它适用于i

等其他迭代器

我不知道如何在谷歌中搜索错误。为什么a会改变?

2 个答案:

答案 0 :(得分:1)

时在python中运行

for x in y:
    pass#your code here

x在for循环之外定义,你可以在循环结束后像普通变量一样使用它

如果您执行类似

的操作
for a in range(10):
    pass
print(a)

它将打印9,因为这是循环内的最后一个值a

对于特定情况,其中iterable(列表)和用于迭代它的变量都被命名为相同,因为您可以看到a对每个值的更改然后保持为最后一个值作为i提及。

然后当你第二次运行它时a只是一个整数,而不是一个列表,因此它不能被迭代。

如果你想知道为什么循环在第一次迭代后没有中断(因为a不是第一次迭代后的原始列表)它是因为原始列表仍然在内存中直到循环退出它只是不能通过其名称寻址,在循环结束后它将被完全从内存中删除

答案 1 :(得分:0)

当然会抛出异常。它在同一范围内是相同的名称。