全局变量以及如何从 Python 中的函数进行更改

Shikha Chaudhary 2023年1月30日 2022年5月17日
  1. 使用全局变量并从 Python 中的函数更改它们
  2. 在 Python 中创建 Global 变量
  3. 从 Python 中的函数更改全局变量的值
  4. Python 中的 Global 关键字
  5. 多个函数和一个全局变量
  6. 具有与全局变量同名的变量的函数
  7. 结论
全局变量以及如何从 Python 中的函数进行更改

Python 中的全局变量是那些具有全局范围的变量。换句话说,它们的范围不限于源代码的任何特定功能或块。

使用全局变量并从 Python 中的函数更改它们

首先,声明变量 x

def avengers():
    x = 10
    print("Gibberish")

avengers()
print(x)

输出:

Gibberish

NameError: name 'x' is not defined

变量 x 在函数 avengers 内。这意味着这个变量的范围仅限于这个函数。

这就是为什么如果我们试图在这个函数之外访问这个变量会得到一个错误。

在 Python 中创建 Global 变量

将变量 x 声明移到函数外。

x = 10
def avengers():
    print("Gibberish")

avengers()
print(x)

输出:

Gibberish
10

变量 x 是在函数外部定义的,因此,我们可以在程序的任何地方使用它。

此外,它是一个全局变量。在全局范围内声明一个变量会在 Python 中创建一个 global 变量。

我们还可以从 avengers 函数访问 global 变量 x

x = 10
def avengers():
    print("From avengers:", x)

avengers()
print("Outside avengers:", x)

输出:

From avengers: 10
Outside avengers: 10

从 Python 中的函数更改全局变量的值

该代码有一个带有 10全局变量 x。然后,在函数 change 中,我们将 12 添加到这个变量 x

函数内的打印语句应该打印 x 的更新值。

x = 10
def change():
    x = x + 12
    print(x)

change()

输出:

UnboundLocalError: local variable 'x' referenced before assignment

在 python 中,一个函数只能访问和打印一个全局变量。我们需要告诉函数引用对全局变量的任何赋值或更改。

如果我们不指定这一点,则函数认为对局部变量本身进行了赋值和更改。因此,我们得到这个错误。

使用 global 关键字从 Python 函数内部更改 global variable 值。

Python 中的 Global 关键字

Python 为你提供了一个名为 global 的关键字来修改其范围之外的变量。当你必须更改变量的值或进行任何分配时使用它。

让我们尝试使用 global 关键字修复上述代码。

x = 10
def change():
    global x
    x = x + 12
    print(x)

change()

输出:

22

看看我们如何在第三行使用 global 关键字将 x 指定为全局。

现在,让我们在函数外部打印变量 x 时查看它的值。

x = 10
def change():
    global x
    x = x + 12
    print(x)

change()
print(x)

输出:

22
22

由于该函数已将 x10 更新为 22,所以即使在本地范围之外访问变量时,我们也会将更新后的值作为输出。

var = 'A'

def chocolate():
    print("From chocolate:", var)
    
def cake():
    global var
    var = var*2
    print("From cake:", var)

chocolate()
cake()
print("From main:", var)

输出:

From chocolate: A
From cake: AA
From main: AA

你可以从此输出中得出的最佳推论是 - 顺序很重要。chocolate 函数使用 var 的初始值,而不是修改后的值。

这是因为修改 var 值的函数 cake 是在函数 chocolate 之后调用的。如果我们首先调用 cake 函数,chocolate 函数也将使用 var 的更新值。

var = 'A'

def chocolate():
    print("From chocolate:", var)

def cake():
    global var
    var = var*2
    print("From cake:", var)

cake()
chocolate()
print("From main:", var)

输出:

From cake: AA
From chocolate: AA
From main: AA

这给我们带来了一些在使用 Python 的 global 关键字时必须遵循的规则。

  • 默认情况下,函数内部的变量是局部变量,函数外部的变量是全局。不要将此关键字用于函数外的变量。
  • 在 Python 中的函数外部使用 global 关键字不会以任何方式影响代码。
  • global 关键字的主要用途是在 Python 中进行赋值或更改。因此,我们不需要它来简单地访问或打印变量。

多个函数和一个全局变量

在这里,我们有一个值为 1 的全局变量 s。看看函数 college 如何使用 global 关键字来修改 s 的值。

s = 1

def college():
    global s
    s = s + 5
    print("College students: ", s)
    return s

def school():
    s = college()
    s = s + 10
    print("School students: ", s)
    return s

college()
school()
print("Global students: ",s)

输出:

College students:  6
College students:  11
School students:  21
Global students: 11

首先,我们将函数称为 college。该函数修改全局变量 s 并将其更改为 6

我们从第一个 print 语句中得到输出为 6。然后,我们将函数称为 school

我们再次在函数 college 中调用函数 school。这一次,函数 college 也修改了变量 s 的值。

它采用先前的值 6,然后将其更新为 11。因此,全局变量的最终值现在变为 11

然后,函数 school 对其进行修改,但这不会在全局变量中更新。它使用 s 的更新值并在添加 10 后打印该值。

它不使用 global 关键字。因此,输出 21。现在你可以看到为什么最后一条语句的输出是 11

这只不过是全局变量 s 的更新值。

具有与全局变量同名的变量的函数

有可能我们有一个函数,其中声明了一个与 global 变量同名的变量。

这里出现的一个不可避免的问题是 - 函数将使用哪个变量?本地还是全球?让我们看看。

#the global variable
a = 5

#function
def music():

    #variable inside function with same name as global variable
    a = 10
    print("Music:", a)

music()
print(a)

输出:

Music: 10
5

这段代码中有一个全局变量 a,其值为 5。函数 music 也有一个名为 a 的变量。

该变量的值为 10。当我们在函数内部访问变量 a 的值时,我们会得到该函数本地变量的值,即 10

当我们从这个函数外部访问 a 的值时,我们得到的输出是 5

这意味着如果 local 变量与特定范围内的 global 变量同名,则它比全局变量具有更高的优先级。

结论

本教程教授了 Python 中全局变量的基础知识。我们看到了它们与局部变量的不同之处以及我们如何在 Python 中创建它们。