全局变量与局部变量
5.3 全局变量与局部变量
全局变量:定义在函数外面的变量,整个文件都能用。
局部变量:定义在函数内部的变量,只能在该函数内部使用。
函数内部访问变量时,优先找局部变量,找不到才找全局变量。
在函数内部想修改全局变量,必须用 global 关键字声明。
💡 尽量少用全局变量,函数之间传递数据用参数和返回值更好。
💡 全局变量通常放在文件最上面,所有函数之前。
💡 全局变量用全大写 + 下划线命名,如 MAX_SCORE,表示常量。
💡 函数参数是局部变量,函数执行完就消失。
认识全局变量
全局变量在函数内外都可以访问。
# ========================================
# 示例:全局变量
# 说明:定义在函数外面的变量叫全局变量
# ========================================
school = '星辰小学' # 全局变量:整个文件都能用
def show_school():
print('学校:', school) # 可以直接读取全局变量
show_school() # 调用函数
print('外面也能用:', school) # 函数外面也能用
认识局部变量
局部变量只能在定义它的函数内部使用。
# ========================================
# 示例:局部变量
# 说明:定义在函数内部的变量叫局部变量
# ========================================
def calc():
result = 100 # 局部变量:只在 calc() 函数内有效
print('函数内 result =', result)
calc()
# print(result) # 错误!result 是局部变量,外面访问不到
# 报错:NameError: name 'result' is not defined
全局与局部同名
同名变量,函数内外各是各的,互不影响。
# ========================================
# 示例:全局与局部同名
# 说明:同名时,函数内优先使用局部变量
# ========================================
count = 10 # 全局变量
def show():
count = 20 # 这里是局部变量,和全局变量同名
print('函数内 count =', count) # 打印局部变量
show()
print('函数外 count =', count) # 打印全局变量
# 输出:函数内 count = 20
# 函数外 count = 10
用 global 修改全局变量
不加 global,函数内赋值会创建新局部变量,不会修改全局。
# ========================================
# 示例:用 global 修改全局变量
# 说明:在函数内用 global 声明后,可以修改全局变量
# ========================================
score = 60 # 全局变量
def add_points():
global score # 声明要使用全局变量 score
score += 10 # 修改全局变量
print('加分后 score =', score)
print('修改前 score =', score)
add_points()
print('修改后 score =', score) # 全局变量被改变了
⚠️ 常见错误与正确对比
❌ 错误写法
def func():
x = 10
print(x) # 错误:x 是局部变量✅ 正确写法
x = 10
def func():
print(x) # 正确:读取全局变量📌 局部变量在函数外不存在,会报 NameError。
❌ 错误写法
x = 10
def func():
x += 5 # 错误:既读取又赋值,默认是局部变量✅ 正确写法
x = 10
def func():
global x
x += 5📌 函数内对全局变量 += 会产生歧义,需要 global 声明。
