
Python 的 for 循环变量始终绑定到当前作用域(通常是全局或函数作用域),每次迭代都会直接赋值覆盖同名变量,不存在独立的“循环局部作用域”;因此嵌套循环会逐层修改同一变量,最终保留最内层最后一次迭代的值。
python 的 `for` 循环变量始终绑定到当前作用域(通常是全局或函数作用域),每次迭代都会直接赋值覆盖同名变量,不存在独立的“循环局部作用域”;因此嵌套循环会逐层修改同一变量,最终保留最内层最后一次迭代的值。
在 Python 中,for 循环不创建新的作用域——这与 if、while、try 等语句一致,但区别于函数(def)、类(class)和模块(module)。这意味着:所有 for kk in ... 中的 kk 都是对同一变量的重复赋值操作,而非声明新变量。它始终位于当前作用域(此处为模块/全局作用域),因此外层 kk = 7 被后续所有循环不断覆盖。
来看你提供的代码:
kk = 7
for kk in range(2): # 第一次:kk ← 0;第二次:kk ← 1
for kk in range(90, 92): # 每次外层迭代中:kk ← 90,再 ← 91
for kk in range(10, 12): # 每次中层迭代中:kk ← 10,再 ← 11
print(kk) # 输出 10、11(共4次)
kk # → 11(最内层最后一次赋值)执行流程如下:
- 初始化 kk = 7
- 外层 range(2) 迭代两次(kk 先被设为 0,再设为 1)
- 每次外层迭代中,中层 range(90, 92) 迭代两次(kk 设为 90 → 91)
- 每次中层迭代中,内层 range(10, 12) 迭代两次(kk 设为 10 → 11),并打印
- 所有赋值均作用于同一个全局变量 kk,因此最终值为 11
⚠️ 关键误区澄清:
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
立即学习“Python免费学习笔记(深入)”;
- ❌ for 循环没有自己的作用域(不像 C++/Java 的 for (int i = 0; ...) 中 i 仅限循环体内);
- ❌ 循环不会“读取”旧 kk 来决定迭代范围——range(2) 在循环开始前就已计算完毕,与 kk 当前值无关;
- ✅ range() 返回的是一个不可变序列对象,其内容完全独立于循环变量名。
✅ 正确实践建议:
- 避免复用同一变量名嵌套多层循环,易引发逻辑混淆和意外覆盖;
- 推荐使用语义化、层级分明的变量名:
for i in range(2): for j in range(90, 92): for k in range(10, 12): print(k) print(f"Final i={i}, j={j}, k={k}") # 清晰可读,且各变量含义明确 - 若需保留初始值,显式备份:
kk_initial = 7 kk = kk_initial # ... 循环逻辑 ... # 后续仍可用 kk_initial 恢复原始值
总结:Python 的 for 变量本质是目标赋值语句(for target in iterable: 等价于反复执行 target = next_item),它遵循常规赋值规则——修改所在作用域中的同名绑定。理解这一点,是掌握 Python 命名空间与作用域机制的关键基础。

















