苦练Python第13天:变量作用域、全局变量与局部变量

苦练Python第13天:变量作用域、全局变量与局部变量

原文链接:dev.to/therahul_gu...

作者: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 查找顺序,调试更轻松

最后感谢阅读!欢迎关注我,微信公众号 :倔强青铜三。欢迎点赞、收藏、关注,一键三连!!!

相关推荐
xhy_0707几秒前
AI 读了 .env,密钥会原样发给大模型吗?WES Code 的密钥打码(附实测)
人工智能·python·数据挖掘·flask·ai编程·wes code
吴佳浩5 分钟前
单卡5090跑125B 大模型:从安装、验证到基准测试的完整操作教程
人工智能
泡海椒8 分钟前
JQuick-Excel 实战:用 STYLE 配置单元格与区域样式
开发语言·python·excel
数智工坊8 分钟前
视觉SLAM第13讲|工程落地:双目视觉里程计系统架构设计与性能优化
人工智能·深度学习·线性代数·性能优化·矩阵·系统架构·机器人
newsxun9 分钟前
校园餐全链条管理有了“实操手册” ——《学校食品安全与营养健康管理操作指南》在成都发布
大数据·人工智能
空堂与归11 分钟前
GPT-6 智能界面上线,对话式 Agent 真没戏了?
人工智能·gpt·ai
码流子12 分钟前
05-AI数字人
人工智能
威联通网络存储13 分钟前
TS-h1283XU-RP 在医药批记录与检验场景的部署
网络·python
moonsims15 分钟前
AiBrainBox “高校算法创新”与“真实无人系统”的国产化智能端侧科研平台-高校 × 企业:构建面向低空与具身智能的产学研协同创新平台
人工智能
Patrick在香港22 分钟前
时间戳凭空早了 8 小时:datetime.utcnow() 弃用实测与漂移复盘
数据库·python·标准库·datetime·时区·弃用