You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中Namespace/scope confusion:循环变量为何覆盖全局变量?

Python循环作用域与迭代逻辑的问题解答

先看你给出的代码:

kk = 7
for kk in range(2): # 取值0到1
    for kk in range(90,92): # 取值90到91
        for kk in range(10,12): # 取值10到11
            print(kk)
kk

1. 为何循环未使用独立作用域,反而覆盖全局kk?

Python的for循环不会为循环变量创建新的作用域,所有层级的kk都属于同一个全局命名空间。不管哪一层循环,迭代时都是把当前值直接赋值给全局的kk变量,完全覆盖之前的取值。

比如初始kk=7,进入最外层循环后,第一次迭代把kk设为0;接着进入中间层循环,把kk改成90;再进入最内层循环,依次把kk设为10、11;最内层循环结束后,中间层下一次迭代把kk设为91,再重复最内层的赋值操作;中间层循环结束后,外层循环第二次迭代把kk设为1,再次走一遍中间和内层的流程,最终kk停在最内层循环的最后一个值11。

2. 为何外层循环未因kk被设为10(超出其range范围)而提前结束?

Python的for循环是基于预先生成的可迭代对象进行迭代,不是依赖循环变量的实时值来判断是否继续的while循环。外层循环在启动时,就已经确定了要迭代的所有元素——range(2)生成的[0,1],后续不管kk被改成什么值,外层循环都会按这个固定的序列依次完成所有迭代,每次迭代开始时只是把序列里的下一个元素重新赋值给kk,中间修改kk不会影响迭代的进度。

内容的提问来源于stack exchange,提问作者Tim Ziemer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 15:42:21