Python嵌套for循环疑问:输出中初始数字2的来源解析
嵌套for循环中初始数字2的来源解析
我是Python新手,在运行一段嵌套for循环代码时,对输出中出现的初始数字2的来源感到困惑,其他数字的循环逻辑都能理解。代码如下:
for a in range(5): print(i) for i in range(3): print(a)
对应的输出为:
2 0 0 0 2 1 1 1 2 2 2 2 2 3 3 3 2 4 4 4
核心原因:Python变量的作用域与循环后变量的保留值
第一个
2的来源:在你运行这段代码之前,i变量已经在当前环境中被定义过,且最后一次赋值为2。比如你之前可能执行过类似for i in range(3): pass的代码,循环结束后i会保留最后一个循环值2,当你再运行这段嵌套循环时,第一次外层循环的print(i)会直接打印这个遗留的i值。后续每个外层循环开头的
2:每次内层循环for i in range(3)会依次将i设为0、1、2,循环结束后i会保留最后一个值2。所以下一次外层循环执行print(i)时,打印的就是上一次内层循环结束后留下的i=2。
完整执行流程拆解
我们逐次分析外层循环的执行:
- 第一次外层循环(a=0):
- 先执行
print(i),此时i是之前遗留的2,输出2 - 进入内层循环,
i依次取0、1、2,每次打印a=0,输出三次0 - 内层循环结束,
i的最终值为2
- 先执行
- 第二次外层循环(a=1):
- 执行
print(i),此时i=2,输出2 - 内层循环打印三次1,结束后
i=2
- 执行
- 第三次外层循环(a=2):
- 执行
print(i),输出2 - 内层循环打印三次2,结束后
i=2
- 执行
- 第四次外层循环(a=3):
- 执行
print(i),输出2 - 内层循环打印三次3,结束后
i=2
- 执行
- 第五次外层循环(a=4):
- 执行
print(i),输出2 - 内层循环打印三次4,结束后
i=2
- 执行
这完全匹配你给出的输出序列。如果想避免这种情况,建议在使用变量前先显式定义,或者确保当前环境没有遗留的变量值(比如重启Python交互环境,或者在脚本开头初始化i)。
内容的提问来源于stack exchange,提问作者Akaki Akhobadze
相关产品推荐
相关产品推荐

