T24:全局,局部,非局部变量
在此篇教程中,你将了解 Python 函数中常用到的全局变量、局部变量、非局部变量以及在何处使用它们。
全局变量
在 Python 中,在函数外部或全局范围内声明的变量称为全局变量。这意味着可以在函数内部或外部访问全局变量。
让我们看一个如何在 Python 中创建全局变量的示例。
示例 1-创建一个全局变量
x = "global"
def foo():
print("内部的 x:", x)
foo()
print("外部的 x:", x)
输出
内部的 x: global 外部的 x: global
在上面的代码中,我们创建了x作为全局变量,并定义了一个foo() 函数来打印全局变量x。最后,我们调用foo()它将打印x的值。
若在函数中改变x的值,则会报错!
x = "global"
def foo():
x = x * 2
print(x)
foo()
输出
UnboundLocalError: local variable 'x' referenced before assignment
输出并显示错误,因为 Python 将x视为局部变量,并且x也未在foo()中定义。
为了完成对x值的更改,我们可以使用 global
关键字进行声明。请参考下篇教程:Python 全局关键字 以了解更多信息。
局部变量
在函数体内或局部作用域中声明的变量称为局部变量。
示例 2-访问范围外的局部变量
def foo():
y = "local"
foo()
print(y)
输出
NameError: name 'y' is not defined
输出并显示错误,因为程序中试图访问全局范围内的局部变量 y
,而局部变量 y
仅在 foo()
或局部范围内有效。
让我们看一个关于如何在 Python 中创建局部变量的示例。
示例 3-创建一个局部变量
通常,我们在函数内部声明一个变量来创建一个局部变量。
def foo():
y = "local"
print(y)
foo()
输出
local
全局、局部变量
在这里,我们将展示如何在同一代码中使用全局变量和局部变量。
示例 4-在同一段代码里使用全局与局部变量
x = "global "
def foo():
global x
y = "local"
x = x * 2
print(x)
print(y)
foo()
输出
global global local
在上面的代码中,我们在foo()中将x声明为全局变量,将y声明为局部变量。然后,我们使用乘法运算符*修改全局变量x并打印x和y。
调用 foo()
后,x
的值变为 global global
的,因为我们使用 x * 2
打印了两次 global
。之后,我们打印局部变量 y
的值,即 local
。
示例 5-全局变量和局部变量同名
x = 5
def foo():
x = 10
print("local x:", x)
foo()
print("global x:", x)
输出
local x: 10 global x: 5
在上面的代码中,我们对全局变量和局部变量使用了相同的名称x。当我们打印相同的变量时,我们会得到不同的结果,因为变量在两个作用域中都被声明,即foo()内部的局部作用域和foo()外部的全局作用域。
当我们在 foo()
中打印变量时,它输出 local x: 10
。这称为变量的局部作用域。
类似地,当我们在 foo()
之外打印变量时,它输出 global x: 5
。这称为变量的全局作用域。
非局部变量
非局部变量用于未定义局部作用域的嵌套函数中。这意味着变量既不能在局部作用域也不能在全局作用域中。
让我们看一个在 Python 中如何使用非局部变量的示例。使用 nonlocal
关键字来创建非局部变量。
示例 6-创建一个非局部变量
def outer():
x = "local"
def inner():
nonlocal x
x = "nonlocal"
print("inner:", x)
inner()
print("outer:", x)
outer()
输出
inner: nonlocal outer: nonlocal
在上面的代码中,有一个嵌套的 inner()
函数。我们使用 nonlocal
关键字来创建非局部变量。inner()
函数定义在另一个函数 outer()
的范围内。
Note : 如果我们更改非局部变量的值,则更改会出现在局部变量中。
转载请注明:XAMPP中文组官网 » [Python]函数⁽²⁴⁾|全局,局部,非局部变量