当循环变量使用相同的名称时,为什么列表会被最后一项覆盖



我试图在Python中运行这个脚本,发现了一些非常奇怪的东西:

test = ['file.txt', 'file1.mkv', 'file2.mkv']                                  
for test in test:
print(test)    
print(test)

当我运行这个脚本时,我期望得到这样的输出:

file.txt
file1.mkv
file2.mkv
['file.txt', 'file1.mkv', 'file2.mkv']

相反,我得到的是:

file.txt
file1.mkv
file2.mkv
file2.mkv

我不明白为什么输出的最后一行是"文件2.mkv";。

在脚本中,我说打印test中的每个值,然后打印test。我从来没有写过更改变量test,所以没有理由输出不是我一开始定义的初始变量test

我知道我可能错了,但我想知道为什么。

试试这个:

test = ['file.txt', 'file1.mkv', 'file2.mkv']                                  
for item in test:
print(item)    
print(test)

您的最后一次打印是打印循环中的最后一个项目,即您称之为test的项目以及您的列表。

Python与其他语言没有相同的块逻辑。在循环中声明的变量在循环之后仍然有效。

for i in range(5):
pass
print(i)

将输出4

实际发生的事情是这样的:

# loop
i = 0
i = 1
i = 2
i = 3
i = 4
# end loop
print(i)  # print(4)

因为您将循环变量命名为与数组相同的名称,所以您将用单个值覆盖数组变量。这就是test在循环之后包含file2.mkv的原因。

此问题提供了有关此主题的一些进一步详细信息。

相关内容

最新更新