全局变量与局部变量

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 声明。