温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Python变量作用域怎么理解

发布时间:2026-09-24 22:08:51 来源:亿速云 阅读:118 作者:小樊 栏目:编程语言

在 Python 里,“变量作用域”说的是一个变量在哪一段代码里能被看到、能被使用。理解作用域,核心就记住一句话:

变量在哪定义,决定了它在哪能用。

下面用通俗 + 例子的方式讲清楚。


一、Python 的 4 种作用域(LEGB)

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 里存在
  • 函数外不能访问 y

三、局部变量“遮蔽”全局变量

x = 10

def func():
    x = 5
    print(x)

func()
print(x)

输出:

5
10

⚠️ 函数里的 x = 5 不是修改全局 x,而是新建了一个局部 x。


四、想在函数里改全局变量:global

x = 10

def func():
    global x
    x = 5

func()
print(x)  # 5

global 告诉 Python:
“我用的是外面的那个 x”


五、嵌套函数:nonlocal

def outer():
    x = 10
    def inner():
        nonlocal x
        x = 20
    inner()
    print(x)

outer()  # 20
  • nonlocal:找外层函数的变量
  • 不是全局,也不是本地

六、常见坑(很重要)

1️⃣ 先读后写会报错

x = 10

def func():
    print(x)  # ❌
    x = 5

func()

报错:UnboundLocalError

原因:
只要函数里有 x = ...,Python 就认为 x 是局部变量。


2️⃣ 默认参数是“定义时”确定的

def f(x=[]):
    x.append(1)
    return x

print(f())
print(f())

输出:

[1]
[1, 1]

✅ 正确写法:

def f(x=None):
    if x is None:
        x = []

七、一句话总结

  • 函数里只读全局变量:可以直接用
  • 函数里修改全局变量:用 global
  • 嵌套函数改外层变量:用 nonlocal
  • 作用域 = 变量的“可见范围”

如果你愿意,我也可以用图解或面试题方式再帮你巩固一遍。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手