答案:Python变量作用域遵循LEGB规则,即局部(L)→嵌套(E)→全局(G)→内置(B)。局部作用域限函数内访问;嵌套作用域允许内层函数引用外层函数变量,支持闭包;全局作用域在模块顶层定义,跨函数共享;内置作用域含预定义标识符如print、len。查找变量按LEGB顺序进行,理解该规则有助于避免命名冲突和实现闭包逻辑。

Python 中变量的作用域决定了变量在程序中的可访问范围。主要有四种作用域类型,通常被称为 LEGB 规则:
L:局部作用域(Local)
局部作用域指的是函数内部定义的变量,只能在该函数内部访问。
- 在函数内通过赋值创建的变量默认属于局部作用域。
- 函数执行结束后,局部变量会被销毁。
def func():
x = 10 # x 是局部变量
print(x)
func() # 输出 10
# print(x) # 这会报错,x 未定义E:嵌套作用域(Enclosing)
嵌套作用域指的是在嵌套函数中,内部函数可以访问外部函数的变量。
- 当内部函数引用一个变量时,如果本地没有,会向外层函数查找。
- 这是闭包实现的基础。
def outer():
y = 20
def inner():
print(y) # 可以访问外层函数的 y
inner()
outer() # 输出 20G:全局作用域(Global)
全局作用域指的是在模块文件顶层定义的变量,可以在整个模块中访问。
立即学习“Python免费学习笔记(深入)”;
- 函数内部若要修改全局变量,需使用
global关键字声明。 - 导入模块后,其全局变量也可被访问(取决于导入方式)。
x = 30 # 全局变量 <p>def func(): global x x = 40 # 修改全局变量 func() print(x) # 输出 40
B:内置作用域(Built-in)
内置作用域包含 Python 预定义的标识符,如 print、len、True 等。
- 这些名称在程序启动时自动可用,位于最外层作用域。
- 尽量避免重写内置名称,以免造成意外行为。
print(len("hello")) # len 和 print 都是内置函数
# len = 10 # 不推荐,会覆盖内置函数Python 按照 LEGB 的顺序查找变量:从局部到嵌套,再到全局,最后到内置作用域。
基本上就这些。理解这四种作用域有助于写出更清晰、不易出错的代码。特别是处理闭包和变量修改时,作用域规则尤为重要。











