智享教程网
白蓝主题五 · 清爽阅读
首页  > 日常经验

全局变量和局部变量:搞懂它们的区别其实很简单

写代码的时候,你有没有遇到过这样的情况:在一个函数里改了个值,结果另一个函数里的数据莫名其妙变了?或者明明定义了变量,却在某个地方用不了?这很可能就是全局变量和局部变量搞的鬼。

什么是全局变量和局部变量

简单来说,全局变量就是在整个程序里都能访问的变量,而局部变量只能在它被定义的那个“小圈子里”用。比如在函数内部定义的变量,一般就是局部的,出了这个函数就找不到了。

举个生活中的例子:你在家里有个公用冰箱(全局变量),谁都能去拿饮料;但你抽屉里藏了一包零食(局部变量),只有你自己知道在哪,别人进不来你的房间就吃不到。

代码里长什么样

来看一段 Python 代码:

name = "小明"  # 全局变量

def say_hello():
    age = 18  # 局部变量
    print(name)  # 能访问全局变量
    print(age)

def say_goodbye():
    print(name)  # 可以访问
    # print(age)  # 这行会报错!age 是局部的,这里看不见

say_hello()
say_goodbye()

上面这段代码中,name 在所有函数外定义,谁都能用;而 age 只属于 say_hello 函数,别的函数想用就会出错。

局部变量也能“重名”

有时候你会看到不同函数里都有叫 i 的循环变量,这没问题,因为它们是各自函数内的局部变量,互不影响。

def count_a():
    i = 0
    for i in range(3):
        print("A:", i)

def count_b():
    i = 5  # 和上面的 i 不冲突
    for i in range(2):
        print("B:", i)

count_a()
count_b()

输出结果不会互相干扰,就是因为每个 i 都只在自己的函数里有效。

小心:别随便改全局变量

虽然可以在函数里读取全局变量,但如果要修改它,就得加 global 关键字,不然 Python 会以为你要新建一个同名的局部变量。

level = 1

def upgrade():
    global level
    level = level + 1
    print("升级了,当前等级:", level)

upgrade()  # 输出:升级了,当前等级:2
print(level)  # 外面也能看到新值

如果不加 global,函数会创建一个新的局部 level,外面的值根本没变,容易让人一头雾水。

为什么要注意这个区别

项目一复杂,到处乱用全局变量就像在厨房随便放调料,下次做饭根本找不到要用的那个。变量作用域不清,bug 就难查,协作开发时更是一团糟。

合理的做法是:能用局部变量解决的,就不要往上抛成全局的。把数据控制在最小可用范围内,代码才干净、好维护。