苦练Python第13天:变量作用域、全局变量与局部变量
作者:Rahul Gupta
译者:倔强青铜三
前言
大家好,我是倔强青铜三 。是一名热情的软件工程师,我热衷于分享和传播IT技术,致力于通过我的知识和技能推动技术交流与创新,欢迎关注我,微信公众号:倔强青铜三。欢迎点赞、收藏、关注,一键三连!!!
欢迎来到 100天Python挑战 的第13天!
今天,我们直击 变量作用域 这一核心概念。
你是否在函数里定义变量后,外部却无法访问?这就是作用域问题。
弄懂 局部 与 全局 的差异,才能写出干净、无 Bug 的代码。
今日速览
- 作用域究竟指什么
- 局部变量 vs 全局变量
- 作用域如何影响变量访问
global
关键字- 真实案例与最佳实践
🔍 作用域是什么?
作用域 决定 变量可被访问的区域 。
Python 主要分两类:
- 局部作用域:函数内部声明的变量
- 全局作用域:函数外部声明的变量
🧪 1. 局部变量
在函数内部定义的变量,仅在该函数内可见。
python
def greet():
name = "Alice"
print("Hello", name)
greet()
print(name) # ❌ 错误:name 未定义
name
只在 greet()
内部存活,外部无法触及。
🌍 2. 全局变量
在所有函数之外定义的变量,可在整个脚本中访问。
python
message = "Welcome!"
def greet():
print(message)
greet()
print(message) # ✅ 正常运行
⚠️ 3. 在函数中修改全局变量
函数内可 读取 全局变量,但若要 修改 ,需加 global
关键字。
错误示例:
python
count = 0
def increment():
count += 1 # ❌ UnboundLocalError
正确示例:
python
count = 0
def increment():
global count
count += 1
increment()
print(count) # ✅ 1
仅在必要时使用
global
,否则调试噩梦等着你。
🎯 实战:用户登录状态
python
# 全局会话状态
is_logged_in = False
def login():
global is_logged_in
is_logged_in = True
def logout():
global is_logged_in
is_logged_in = False
login()
print("User logged in?", is_logged_in) # True
🧠 变量查找 LEGB 法则
Python 按 LEGB 顺序解析变量:
- L -- Local:当前函数内部
- E -- Enclosing:外层函数(嵌套场景)
- G -- Global:脚本顶层
- B -- Built-in:Python 内置名称,如
print
、len
🧼 最佳实践
- ✅ 优先使用 局部变量,减少副作用
- ✅ 用 函数参数 和 返回值 传递数据
- ⚠️ 慎用
global
,除非万不得已 - 🚫 绝不让局部与全局变量重名,避免混乱
🧠 今日复盘
- 作用域决定变量生命周期
- 局部变量安全,全局变量灵活
global
关键字可跨域修改- 牢记 LEGB 查找顺序,调试更轻松
最后感谢阅读!欢迎关注我,微信公众号 :
倔强青铜三
。欢迎点赞
、收藏
、关注
,一键三连!!!