当前位置:首页>python>Python零基础第17讲:变量作用域

Python零基础第17讲:变量作用域

  • 2026-09-17 18:28:51
Python零基础第17讲:变量作用域

导语:在 Python 编程中,你是否遇到过这样的困惑:明明在函数里定义了变量,函数外却死活找不到?或者明明改了全局变量的值,打印出来却还是原样? 今天,我们就通过 “变量作用域” 这一讲,拆解 Python 查找变量的底层逻辑。


一、 什么是作用域?

作用域(Scope) = 变量在哪个范围内可以被访问。

在 Python 中,我们最常打交道的是两类“领地”:

  1. 全局变量: 定义在函数之外,像“广播”一样全场可见。

  2. 局部变量: 定义在函数内部,像“悄悄话”一样只在函数内有效。


二、 局部变量:函数里的“小秘密”

观察下面这段代码:

def test():    x = 5  # 这是一个局部变量test()print(x)

运行结果:

NameError: name 'x' is not defined

解析: 变量 x 是在 test() 函数内部出生的,它的生命周期随着函数运行结束而消失。外面的世界想访问它?门都没有!


三、 全局变量:只许看,不许动?

1. 全局变量可以“读取”

函数内部是可以直接读取外部定义的全局变量的:

x = 10  # 全局变量def show():    print(x)  # 读取全局变量show()# 输出:10

2. 为什么直接修改会失败?

这是很多新手最容易踩的坑:

x = 10def change():    x = 20  # 试图修改change()print(x)# 输出:10

解析: 当你在函数内部写下 x = 20 时,Python 并没有去改外面的全局变量,而是在函数内部新建了一个同名的局部变量 x。函数一结束,这个局部变量就销毁了,外面的 x 依然是 10。


四、 终极武器:global 关键字

如果你非要在函数内部修改全局变量,必须先发出一声“声明”:

x = 10def change():    global x  # 郑重声明:我要用的是外面的那个 x    x = 20change()print(x)# 输出:20

划重点:global 就像一张通行证,赋予了函数修改全局变量的权力。


五、 变量查找的“潜规则”:LEGB 规则

当你在代码里引用一个变量时,Python 会按照以下顺序从内向外像剥洋葱一样查找:

  1. L (Local): 当前函数内部(局部作用域)。

  2. E (Enclosing): 嵌套函数的外层(闭包作用域)。

  3. G (Global): 当前模块的最外层(全局作用域)。

  4. B (Built-in): Python 自带的内置函数,如 print、len(内置作用域)。

口诀: 如果当前找不到,就往外走一步;直到最外面都找不到,才会报错。


六、 本讲总结

  • 函数内变量:默认是局部的,函数结束即销毁。

  • 全局变量:可以直接读,但不能直接改。

  • 修改秘籍:想改全局变量?记得加 global。

  • 核心思维:理解 LEGB,你就掌握了 Python 函数运行的灵魂。

我为你整理了一套《Python零基础保姆级教程》,这不只是干巴巴的理论,而是包含:

✅ 完整版 Python 零基础到精通完整代码

✅ 完整注释讲解,一键运行

👇 获取方式:

想要解锁 [Python保姆级教程] 的同学,可以点击下方赞赏支持博主,并在后台留言

最新文章

随机文章