苦练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 查找顺序,调试更轻松

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

相关推荐
CoderYanger3 分钟前
Java EE 进阶:5. Spring IoC&DI(第二弹):Spring IoC
java·开发语言·spring boot·spring·面试·职场和发展·java-ee
验真所7 分钟前
半衰期估错 10 倍,一条判据误杀 100% 的信号:AR(1) 反解的三个坑
人工智能·ai编程
深圳市益普科技有限公司13 分钟前
半导体SPC工具怎么选?从控制图算法到落地架构的对比
大数据·人工智能·架构
大侠在此在在此18 分钟前
我花了不到1块钱,用python把自己一年的1500次会话做成了个人知识库
python·llm
alonglong19 分钟前
本地把工业级 TTS 跑通:IndexTTS-2.5 在 Mac MPS 上的部署与推理工程实录
人工智能
wangfpp20 分钟前
手写 MCP 接入:搞懂工具即插即用
人工智能
yumengxt21 分钟前
百度 AI 搜索核心能力与实测表现深度评测
人工智能·百度
Jino25 分钟前
900×2100 的门洞,展开面积却是 3.4 ㎡ —— 不锈钢核价引擎的七条口径
python
Yyq1302086968225 分钟前
AX8860,对标NVIDIA DGX Spark,端侧大算力芯片
人工智能
xunberg25 分钟前
【Agent 生产化手记-02】Agent 怎么向人提问
人工智能·算法·架构