理解Python全局、局部与非局部变量
理解Python全局、局部与非局部变量
掌握Python中全局、局部、非局部变量的用法,知晓何时应用各类变量以编写清晰、可维护代码。
视频:Python局部与全局变量
全局变量
Python中,模块层级(函数外)声明的变量是 全局变量。模块任处可读,但函数内修改需用 global 关键字声明。
示例:创建和读取全局变量
x = "global"
def foo():
print("x inside:", x)
foo()
print("x outside:", x)
输出
x inside: global x outside: global
未声明全局就重新赋值 x 导致 UnboundLocalError:
x = "global"
def foo():
x = x * 2
print(x)
foo()
输出
UnboundLocalError: local variable 'x' referenced before assignment
函数内修改全局变量,用 global 关键字:
x = "global"
def foo():
global x
x = x * 2
print(x)
foo()
输出
globalglobal
局部变量
局部变量 定义在函数体内,仅在函数执行期间存在。函数外不可访问。
示例:在作用域外访问局部变量
def foo():
y = "local"
foo()
print(y)
输出
NameError: name 'y' is not defined
正确定义和使用局部变量:
def foo():
y = "local"
print(y)
foo()
输出
local
全局与局部变量结合
同一模块常同时使用两种作用域。global 关键字确保变量指向模块级实例。
x = "global "
def foo():
global x
y = "local"
x = x * 2
print(x)
print(y)
foo()
输出
global global local
局部变量与全局变量同名时,它们独立:
x = 5
def foo():
x = 10
print("local x:", x)
foo()
print("global x:", x)
输出
local x: 10 global x: 5
非局部变量
嵌套函数可用 nonlocal 关键字访问和修改外层(非全局)作用域变量。
def outer():
x = "local"
def inner():
nonlocal x
x = "nonlocal"
print("inner:", x)
inner()
print("outer:", x)
outer()
输出
inner: nonlocal outer: nonlocal
注意: 在内部函数更新非局部变量会更新外部函数作用域中的该变量。
Python