全局变量以及如何从 Python 中的函数进行更改
-
使用
全局变量
并从 Python 中的函数更改它们 -
在 Python 中创建
Global
变量 -
从 Python 中的函数更改
全局
变量的值 -
Python 中的
Global
关键字 - 多个函数和一个全局变量
-
具有与
全局
变量同名的变量的函数 - 结论
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
由于该函数已将 x
从 10
更新为 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 中创建它们。