这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » Python之全局、局部和非局部变量及示例

共1条 1/1 1 跳转至

Python之全局、局部和非局部变量及示例

助工
2021-01-18 16:48:28     打赏

在Python中,在函数之外或在全局范围内声明的变量被称为全局变量。这意味着,全局变量可以在函数内部或外部访问。我们来看一个关于如何在Python中创建一个全局变量的示例。


示例1:创建全局变量

x="global"
deffoo():
print("xinside:",x)
foo()
print("xoutside:",x)


当我们运行代码时,将会输出:

xinside:global
xoutside:global


在上面的代码中,我们创建了x作为全局变量,并定义了一个foo()来打印全局变量x。最后,我们调用foo()来打印x的值。

倘若你想改变一个函数内的x的值该怎么办?

x="global"
deffoo():
x=x*2
print(x)
foo()


当我们运行代码时,将会输出:

UnboundLocalError:localvariable'x'referencedbeforeassignment


输出显示一个错误,因为Python将x视为局部变量,而x没有在foo()内部定义。

为了运行正常,我们使用global关键字,查看PythonGlobal关键字以便了解更多。

局部变量

在函数体内或局部作用域内声明的变量称为局部变量。

示例2:访问作用域外的局部变量

deffoo():
y="local"
foo()
print(y)


当我们运行代码时,将会输出:

NameError:name'y'isnotdefined


输出显示了一个错误,因为我们试图在全局范围内访问局部变量y,而局部变量只能在foo()函数内部或局部作用域内有效。

我们来看一个关于如何在Python中创建一个局部变量的例子。

示例3:创建一个局部变量

通常,我们在函数内声明一个变量来创建一个局部变量。

deffoo():
y="local"
print(y)
foo()


当我们运行代码时,将会输出:

local


让我们来看看前面的问题,其中x是一个全局变量,我们想修改foo()内部的x。

全局变量和局部变量

在这里,我们将展示如何在同一份代码中使用全局变量和局部变量。

示例4:在同一份代码中使用全局变量和局部变量

x="global"
deffoo():
globalx
y="local"
x=x*2
print(x)
print(y)
foo()


当我们运行代码时,将会输出(LCTT译注:原文中输出结果的两个global有空格,正确的是没有空格):

globalgloba
local


在上面的代码中,我们将x声明为全局变量,将y声明为foo()中的局部变量。然后,我们使用乘法运算符*来修改全局变量x,并打印x和y。

在调用foo()之后,x的值变成globalglobal了(LCTT译注:原文同样有空格,正确的是没有空格),因为我们使用x*2打印两次global。之后,我们打印局部变量y的值,即local。

示例5:具有相同名称的全局变量和局部变量

x=5
deffoo():
x=10
print("localx:",x)
foo()
print("globalx:",x)


当我们运行代码时,将会输出:

localx:10
globalx:5


在上面的代码中,我们对全局变量和局部变量使用了相同的名称x。当我们打印相同的变量时却得到了不同的结果,因为这两个作用域内都声明了变量,即foo()内部的局部作用域和foo()外面的全局作用域。

当我们在foo()内部打印变量时,它输出localx:10,这被称为变量的局部作用域。

同样,当我们在foo()外部打印变量时,它输出globalx:5,这被称为变量的全局作用域。

非局部变量

非局部变量用于局部作用域未定义的嵌套函数。这意味着,变量既不能在局部也不能在全局范围内。

我们来看一个关于如何在Python中创建一个非局部变量的例子。(LCTT译者注:原文为创建全局变量,疑为笔误)

我们使用nonlocal关键字来创建非局部变量。

示例6:创建一个非局部变量

defouter():
x="local"
definner():
nonlocalx
x="nonlocal"
print("inner:",x)
inner()
print("outer:",x)
outer()


当我们运行代码时,将会输出:

inner:nonlocal
outer:nonlocal


在上面的代码中有一个嵌套函数inner()。我们使用nonlocal关键字来创建非局部变量。inner()函数是在另一个函数outer()的作用域中定义的。

注意:如果我们改变非局部变量的值,那么变化就会出现在局部变量中。



共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]