一、基本概念

  1. 命名空间 namespace存放变量名→值映射的字典,用来区分同名变量,互不冲突。常见 4 种:
  • 内置命名空间(builtins):print/len 等系统函数
  • 全局命名空间(global):文件顶层变量
  • 局部命名空间(local):函数内部变量
  • 嵌套命名空间:外层函数变量
  1. 作用域 scope变量能被访问到的范围

二、四大作用域(LEGB 规则)

查找顺序:L → E → G → B

  1. L Local 局部:函数内部
  2. E Enclosing 嵌套外层:外层函数(闭包用)
  3. G Global 全局:模块顶层
  4. B Built-in 内置:系统内置

口诀

先找自己,再找外层,再找全局,最后找内置


三、全局变量 & 局部变量

1. 正常访问

python

运行

a = 100  # 全局变量

def func():
    print(a)  # 可以读取全局

func()

2. 函数内修改全局 → 必须加 global

python

运行

a = 100

def func():
    global a   # 声明使用全局变量
    a = 200

func()
print(a) # 200

不加global会被当成局部变量,报错。

3. nonlocal 关键字(嵌套函数改外层变量)

python

运行

def outer():
    x = 10
    def inner():
        nonlocal x  # 修改外层函数变量
        x = 20
    inner()
    print(x)
outer()
  • nonlocal:只找外层函数,不找全局
  • global:只找全局

四、常用内置函数

  1. globals() 查看全局命名空间
  2. locals() 查看当前局部命名空间

python

运行

print(globals())
def f():
    a=1
    print(locals())
f()

五、易错点总结

  1. 函数内只读全局不用声明修改必须 global
  2. 嵌套函数改外层变量用 nonlocal
  3. 局部变量优先级 > 全局变量
  4. 代码块(if/for/while)不产生新作用域

python

运行

if True:
    num = 99
print(num) # 能访问
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐