在 Python 里,“变量作用域”说的是一个变量在哪一段代码里能被看到、能被使用。理解作用域,核心就记住一句话:
变量在哪定义,决定了它在哪能用。
下面用通俗 + 例子的方式讲清楚。
Python 按查找顺序分为 4 层(从内到外):
L — Local(局部)
函数内部定义的变量
E — Enclosing(嵌套)
外层函数里的变量(闭包场景)
G — Global(全局)
模块最外层定义的变量
B — Built-in(内置)
Python 自带的(如 print、len)
查找顺序:
L → E → G → B
x = 10 # 全局变量 G
def func():
y = 20 # 局部变量 L
print(x, y)
func()
x 是全局的y 只在 func 里存在yx = 10
def func():
x = 5
print(x)
func()
print(x)
输出:
5
10
⚠️ 函数里的 x = 5 不是修改全局 x,而是新建了一个局部 x。
globalx = 10
def func():
global x
x = 5
func()
print(x) # 5
global 告诉 Python:
“我用的是外面的那个 x”
nonlocaldef outer():
x = 10
def inner():
nonlocal x
x = 20
inner()
print(x)
outer() # 20
nonlocal:找外层函数的变量x = 10
def func():
print(x) # ❌
x = 5
func()
报错:UnboundLocalError
原因:
只要函数里有 x = ...,Python 就认为 x 是局部变量。
def f(x=[]):
x.append(1)
return x
print(f())
print(f())
输出:
[1]
[1, 1]
✅ 正确写法:
def f(x=None):
if x is None:
x = []
globalnonlocal如果你愿意,我也可以用图解或面试题方式再帮你巩固一遍。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。