Python 局部变量 vs 全局变量

小白也能看懂的可视化教程

1. 生活中的例子

在写代码之前,我们先想象一个生活场景。为了不混淆,我们这里的变量名字完全不同。

🌳

全局变量 (Global)

就像公园里的时钟

  • 定义在函数外面的。
  • 所有人(任何函数)都可以看到并读取时间。
  • 它一直存在,直到世界末日(程序结束)。
🏠

局部变量 (Local)

就像你卧室里的牙刷

  • 定义在函数内部的。
  • 只有你自己(当前函数)能使用它。
  • 出了卧室(函数运行完),它就没人管了(被销毁)。

2. 代码执行全过程动画

点击下方的 "下一步" 按钮,观察右侧内存的变化。注意看变量在哪里产生,又在哪里消失。

规则: game_score 是全局的,current_bonus 是局部的。

# 全局区域 game_score = 100 def show_bonus(): # 进入局部区域(函数内部) current_bonus = 50 print("内部奖励:", current_bonus) print("内部总分:", game_score) # 函数结束,局部变量销毁 # 主程序开始 show_bonus() print("外部总分:", game_score) # 下面这行会报错,因为访问不到局部变量 # print(current_bonus)
🖥️ 计算机内存状态
Global (全局作用域)
Local (函数 show_bonus 作用域)
准备就绪,请点击下一步...
> 控制台输出:

3. 核心总结

⚠️ 初学者必看:为什么不建议使用同名变量?

在上面的例子中,我特意使用了 game_scorecurrent_bonus 两个完全不同的名字,你是不是觉得很清晰?

但在实际开发中,如果名字一样,事情就会变得很复杂。这叫变量遮蔽 (Variable Shadowing)

x = 10 # 全局的 x
def test():
    x = 5 # 这里的 x 是全新的局部变量!不是外面的那个!
    print(x) # 输出 5
test()
print(x) # 输出 10 (全局的没变)

容易产生的误解: 初学者往往以为在函数里写 x=5 是修改了外面的那个全局变量,其实Python是创建了一个新的同名局部变量,它“挡住”了外面的变量。

💡 建议: 为了避免逻辑混乱,请尽量给局部变量和全局变量取不同的名字