电脑工场
白蓝主题五 · 清爽阅读
首页  > 电脑基础

变量的作用域:为什么我在函数里改了变量,外面却没变?(进阶教程)

你写了一段代码,里面有个变量count,在函数里把它加了 1,可一跳出函数,发现 count 还是老样子——没变。不是代码写错了,是变量的作用域在起作用。

啥是作用域?

简单说,就是变量能被“看见”和使用的范围。就像你家客厅的遥控器,只在客厅能用;拿到隔壁房间,别人就找不到它了。变量也一样,它出生在哪,就在哪能被调用。

最常见的两种作用域

大多数编程语言(比如 Python、JavaScript)里,主要分两种:

局部作用域:变量定义在函数内部,那它只归这个函数管。函数一执行完,它就自动消失,外面压根不知道它存在过。

def add_one():
    num = 10
    num += 1
    print("函数里:", num)  # 输出:11

add_one()
print("函数外:", num)  # 报错!NameError: name 'num' is not defined

全局作用域:变量写在所有函数外面,整个文件里基本都能访问到。

score = 85

def show_score():
    print("当前分数:", score)  # 能正常打印 85

show_score()
print("外面也能看到:", score)  # 同样能打印 85

小心“同名不同命”

如果函数里又定义了一个和全局变量同名的变量,那函数里用的就是自己的那个,不会影响外面的。就像两家人各养了一只叫“旺财”的狗,你喊一声“旺财”,你家狗跑过来,邻居家的理都不理。

name = "小明"

def change_name():
    name = "小红"  # 这是新的局部变量
    print("函数里:", name)  # 小红

change_name()
print("函数外:", name)  # 还是小明

想在函数里改全局变量?得打招呼

真想改全局变量,Python 里得加 global 声明,JavaScript 里得确认它确实是全局声明(比如没用 letconst)。不然默认就当你在造一个新的局部变量。

money = 100

def spend():
    global money
    money -= 20
    print("花了20,还剩:", money)  # 80

spend()
print("外面看:", money)  # 也是 80

作用域不是限制,是保护。它让变量各司其职,避免东改西动、牵一发而动全身。写代码时多留心变量在哪定义的,自然就少踩坑。