网站首页 > 技术文章 正文
您是否曾经在函数内部定义了一个变量,然后试图在外部访问它 — 结果却得到了一个错误?这就是作用域问题!
理解局部和全局变量之间的区别将帮助您编写干净、无错误的代码。
今天您将学习什么
- 变量作用域的含义
- 局部和全局变量之间的区别
- 作用域如何影响对变量的访问
- global关键字
- 真实世界示例和最佳实践
什么是作用域?
作用域决定了变量在代码中的哪些地方可以被访问。
在Python中,主要有两种类型:
- 局部作用域:在函数内部声明的变量。
- 全局作用域:在所有函数外部声明的变量。
1. 局部变量
在函数内部定义的变量对该函数是局部的。
def greet():
name = "Alice"
print("Hello", name)
greet()
print(name) # 错误:name未定义
name只存在于greet()函数内部。试图在外部访问它会导致错误。
2. 全局变量
在所有函数外部定义的变量是全局的,可以从脚本的任何地方访问。
message = "Welcome!"
def greet():
print(message)
greet()
print(message) # 这可以工作
3. 在函数内部修改全局变量
您可以在函数内部读取全局变量,但要修改它们,您需要使用global关键字。
不使用global:
count = 0
def increment():
count += 1 # 错误:UnboundLocalError
这会给出错误,因为Python将count视为一个新的局部变量。
使用global:
count = 0
def increment():
global count
count += 1
increment()
print(count) # 1
仅在必要时使用global关键字,因为它可能使调试变得更困难。
真实世界示例:用户会话
# 全局会话
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("用户已登录?", is_logged_in) # True
变量解析:LEGB规则
Python使用LEGB规则来解析变量名:
- L – Local(局部):在当前函数内部
- E – Enclosing(封闭):在封闭函数中(用于嵌套函数)
- G – Global(全局):在脚本的顶层定义
- B – Built-in(内置):由Python本身提供(print、len等)
最佳实践
- 优先使用局部变量以避免副作用
- 使用函数参数和返回值进行数据传输
- 除非绝对必要,否则避免使用global
- 永远不要对局部和全局变量使用相同的名称(会混淆!)
回顾
今天您学习了:
- 变量作用域是什么以及为什么它很重要
- 局部和全局变量之间的区别
- global关键字如何工作
- 解析变量名的LEGB规则
- 为什么使用局部作用域通常更安全
猜你喜欢
- 2025-07-21 Python基础课堂 第二节 变量 #python编程
- 2025-07-21 python变量的秘密?(python的变量有哪些)
- 2025-07-21 为什么在Python3里有的变量前面有个*号呢?看完我懂了
- 2025-07-21 Python变量大变身!多次赋值后,内存空间竟然“换房”了?
- 2025-07-21 Python变量揭秘:内存里的“带标签盒子”,三要素缺一不可!
- 2025-07-21 Python自动化办公学习笔记11——布尔类型、变量赋值、类型转换
- 2025-07-21 Python教程(四):变量和数据类型简单解释
- 2025-07-21 Python 动态生成变量名以及动态获取变量的变量名
- 283℃Python短文,Python中的嵌套条件语句(六)
- 279℃PythonNet:实现Python与.Net代码相互调用!
- 279℃python笔记:for循环嵌套。end=""的作用,图形打印
- 274℃Python实现字符串小写转大写并写入文件
- 273℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 133℃原来2025是完美的平方年,一起探索六种平方的算吧
- 118℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 111℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 最近发表
-
- python tkinter tk窗口组件的基础用法介绍
- 一起学python:Tkinter——轻装上阵,快速入门
- Python GUI 编程:tkinter 初学者入门指南——窗格窗口
- Python GUI 编程:tkinter 初学者入门指南——Ttk 小部件
- Python,Tkinter的基础使用(python3 tkinter)
- 图文并茂:Python Tkinter从入门到高级实战全解析
- python tkinter桌面应用gui库基础介绍
- Python tkinter写个画图板,一个坑和实用知识解析
- python tkinter组件概述(python的tkinter模块详解)
- Flask中使用Blinker实现信号传递(flask传数据给前端)
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)