❝Python入门第十八课,主要是学习了局部、嵌套、全局、内置四种作用域,按LEGB规则层层向外查找,共同构成变量的可见范围与访问层级。
- 局部作用域(Local)
- 外层作用域(Enclosing)
- 全局作用域(Global)
- 内建作用域(Built-in)
Python 中有4中作用域:
❏ Local(局部作用域)
❏ Enclosing(外层作用域)
❏ Global(全局作用域)
❏ Built-in(内建作用域)
当访问一个变量时,Python 会按照以下顺序查找:
❝Local -> Enclosing -> Global -> Built-in
作用域范围图示:

下面逐个介绍。
局部作用域(Local)
定义:函数的内部就是局部作用域,局部作用域中的变量,只在该函数内部可见。
特定:
- 局部作用域优先级最高,即:查找一个变量时,Python 会首先在局部作用域中查找。
举例:
deftest():
x = 10
print(x) # 在局部作用域,可以访问
test()
# print(x) # 不可访问,报错:NameError: name 'x' is not defined
外层作用域(Enclosing)
定义:如果函数中有定义了函数,那么外层函数的作用域,就是内层函数的 Enclosing 作用域。
特定:
举例:
defouter():
x = 10# outer 的局部变量,是 inner 的 Enclosing 变量
definner():
# 下面两行代码,修改外层函数作用域变量
nonlocal x
x = 12
print('内层函数输出:', x) # 内层函数读取外层变量
inner()
print('外层函数输出:', x)
outer()
全局作用域(Global)
定义:.py文件就是全局作用域,全局作用域中的变量,在当前.py文件的任何位置都可以访问。
特定:
- 函数内部可以使用
global关键字修改全局变量。
举例:
a = 100
b = 200
deftest2():
# 以下两行代码,修改全局变量
global b
b = 300
print(a, b)
test2()
print(a, b) # 在文件任何位置都可以访问
内建作用域(Built-in)
定义:Python 预先定义好的东西,会放在内建作用域中,所有.py文件都可以直接使用。
特定:
- 所有
.py文件都能直接使用其中的名称,例如:print、len、range、sum、max等。 - 查找优先级最低,即:查找一个变量时,内建作用域是“最后一道防线”。
举例:
print('hello')
len([1, 2, 3])
❝总结
本文的内容需要多多理解。