新闻  |   论坛  |   博客  |   在线研讨会
Python视频教程之Python全局、局部和非局部变量及示例分享
扣丁学堂1 | 2021-01-18 16:48:20    阅读:1604   发布文章

在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()的作用域中定义的。

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

以上就是扣丁学堂Python培训之全局、局部和非局部变量及示例的详细介绍,希望对小伙伴们有所帮助。想要了解更多内容的小伙伴可以登录扣丁学堂官网咨询,扣丁学堂是专业的Python培训机构,不仅有专业的老师和与时俱进的课程体系,还有大量的Python视频教程供学员观看学习哦。扣丁学堂python学习交流群:816572891。微信号:codingbb

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客