1. 首页
  2. 技术文章

19、Python全局,局部和非局部变量

全局变量

在Python中,在函数外部或全局范围内声明的变量称为全局变量。这意味着可以在函数内部或外部访问全局变量。

让我们看一下如何在Python中创建全局变量的示例。

示例1:创建一个全局变量

x = "global"

def foo():
    print("x inside:", x)

foo()
print("x outside:", x)

输出

x inside: global
x outside: global

在上面的代码中,我们创建了 X作为全局变量并定义afoo()以打印全局变量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()

为了使这项工作有效,我们使用global关键字。访问Python全局关键字以了解更多信息。


局部变量

在函数主体内部或局部范围内声明的变量称为局部变量。

示例2:访问范围之外的局部变量

def foo():
    y = "local"


foo()
print(y)

输出

NameError: name 'y' is not defined

输出显示错误,因为我们正在尝试访问局部变量 在全局范围内,而局部变量仅在内部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(),其输出全局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()

注意:如果我们更改非局部变量的值,则更改将显示在局部变量中。

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站不拥有所有权,不承担相关法律责任。如发现有侵权/违规的内容, 联系QQ1841324605,本站将立刻清除。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

服务热线:130-0886-1890

QR code