Python全局,局部和非局部变量
在本文中,您将了解Python全局变量,局部变量,非局部变量以及在何处使用它们。
全局变量
在Python中,在函数外部或全局范围内声明的变量称为全局变量。这意味着可以在函数内部或外部访问全局变量。
让我们来看一个如何在Python中创建全局变量的示例。
示例1:创建一个全局变量
x = "global"
def foo():
print("x inside:", x)
foo()
print("x outside:", x)
运行代码
x inside: global x outside: global
当我们运行代码时,将输出:
在上面的代码中,我们创建了 X作为全局变量,并定义一个foo()
以打印全局变量X。最后,我们调用foo()
会打印出X。
如果您想更改的值怎么办 X 里面的功能?
x = "global"
def foo():
x = x * 2
print(x)
foo()
运行代码
当我们运行代码时,将输出:
UnboundLocalError:赋值之前引用了局部变量“ x”
输出显示错误,因为Python对待 X 作为局部变量和 X也未在内部定义foo()
。
为了使这项工作,我们使用global
关键字。要了解更多信息,请访问Python全局关键字。
局部变量
在函数体内或局部范围内声明的变量称为局部变量。
示例2:访问范围外的局部变量
def foo():
y = "local"
foo()
print(y)
运行代码
当我们运行代码时,将输出:
NameError:未定义名称“ y”
输出显示错误,因为我们正在尝试访问局部变量 ÿ在全局范围内,而局部变量仅在内部foo()
或局部范围内起作用。
让我们看一个有关如何在Python中创建局部变量的示例。
示例3:创建局部变量
通常,我们在函数内部声明一个变量以创建局部变量。
def foo():
y = "local"
print(y)
foo()
运行代码
当我们运行代码时,它将输出:
local
让我们来看看前面的问题在那里X 是一个全局变量,我们想修改 X里面foo()
。
全局和局部变量
在这里,我们将展示如何在同一代码中使用全局变量和局部变量。
示例4:在同一代码中使用全局变量和局部变量
x = "global"
def foo():
global x
y = "local"
x = x * 2
print(x)
print(y)
foo()
运行代码
当我们运行代码时,将输出:
global global local
在上面的代码中,我们声明 X 作为全球性的 ÿ作为中的局部变量foo()
。然后,我们使用乘法运算符*
来修改全局变量X 而且我们都打印 X 和 ÿ。
调用后foo()
,的值X成为global global
因为我们使用x * 2
两次打印global
。之后,我们打印局部变量的值ÿ即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()
。
注意:如果我们更改非局部变量的值,则更改将显示在局部变量中。