python的命名空间、作用域、LEGB、global、nonlocal

张开发
2026/4/16 1:46:42 15 分钟阅读

分享文章

python的命名空间、作用域、LEGB、global、nonlocal
命名空间、作用域、LEGB、global、nonlocal保证你看完就通透一、先搞懂命名空间 名字的 “户口本”每个变量、函数、类都有一个自己的区域这个区域就叫命名空间。作用只有一个防止重名打架python运行x 10 # 全局的x def func(): x 20 # 局部的x这两个x完全不冲突因为它们不在一个命名空间里。二、作用域 变量能在哪里用Python 只有4 个作用域记住LEGB就行LLocal局部函数里面定义的只能在里面用。def f(): a 1 # 局部变量EEnclosing嵌套 / 闭包外层函数里的变量内层函数能用。def outer(): a 1 # E def inner(): print(a) # 可以访问GGlobal全局整个文件都能用。a 10 # 全局BBuilt-in内置Python 自带的比如printlensum。三、最重要规则LEGB 查找顺序Python 找变量是从里往外找先找局部 L → 再找嵌套 E → 再找全局 G → 最后找内置 B找不到就报错四、global 到底干嘛一句话在函数里想修改 全局不可变变量数字、字符串必须加 global不加你创建的是局部新变量加了你改的是全局变量例子 1不加 global → 改不到全局x 10 def f(): x 20 # 这是新的局部x不是全局x f() print(x) # 10 没变例子 2加 global → 真的修改全局x 10 def f(): global x x 20 f() print(x) # 20 真的改了五、nonlocal 到底干嘛一句话在嵌套函数里想修改外层函数的变量用 nonlocal它不改全局只改外层函数。def outer(): x 10 def inner(): nonlocal x # 声明用外层的x x 20 inner() print(x) # 20 outer()六、超级重要的小知识必考点if /for/while 不会创建新作用域只有函数、类、模块才会创建作用域。if True: a 10 print(a) # 10 可以访问七、终极总结背会这 5 句就够命名空间防止名字重复作用域变量能用的范围LEGB查找顺序 局部→嵌套→全局→内置global在函数里修改全局不可变变量nonlocal在内层函数里修改外层函数变量

更多文章