Python 中的 global

今天,没状态看论文,但又不想浪费时间,就选择了多学点 Python 进阶的内容。主要是整理关于 global 的内容,并说说它与 return 的差别。内容很简单,只需要了解概念就行。

全局变量

首先,看一个常见的例子 - return

1
2
3
4
5
6
7
def add(v1, v2):
return v1 + v2


>>> result = add(2,5)
>>> print(result)
7

该函数实现的是,return 返回函数的最终结果,然后下面将值赋值给了变量 result

现在将其写成 global的形式:

1
2
3
4
5
6
7
def add(v1, v2):
global result
result = v1 + v2

>>> add(2,5)
>>> print(result)
7

这个函数是生成了一个 global 变量 result,也就是说生成的变量 result全局变量。什么是全局变量呢?就是除了所在的函数,其他函数也能调用这个变量。即在函数以外的区域都能够访问这个变量。下面的例子就可以说明:

1
2
3
4
5
6
7
8
9
10
11
# 没有 global 变量
def add(v1, v2):
result = v1 + v2
return result

>>> add(2, 5)
7
>>> print(result)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'result' is not defined

上面的例子是没有 global 变量的例子,但是后面想访问 result 的时候,Python 解释器会报错。这是因为,在函数之外不能够调用这个在函数之内的变量。使用下面的全局变量就不会报错了:

1
2
3
4
5
6
7
8
# 有 global 变量
def add(v1, v2):
global result
result = v1 + v2

>>> add(2,5)
>>> print(result)
7

实际上,在实际的工作中,我们应该避免使用 global 变量,因为有时候会将多余的变量引入全局作用域。

返回多个结果

在 Python 中,有时候你想返回多个结果,这时候该怎么做呢?方法一,可以使用前面的 global 来返回多个全局变量:

1
2
3
4
5
6
7
8
9
10
11
12
13
def msg():
global name
global age

name = "caoqi95"
age = 23


>>> msg()
>>> name
'caoqi95'
>>> age
23

需要注意的是:这样的做法很不好,不建议使用这样的方法。下面提供其他两种高效的方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 仅使用逗号分隔,返回多个结果
def msg():
name = "caoqi95"
age = 23
return name, age

>>> msg()
('caoqi95', 23) # NoneType


# 使用元祖的形式,返回多个结果
def msg():
name = "caoqi95"
age = 23
return (name, age)

>>> msg()
('caoqi95', 23)
>>> msg()[0]
'caoqi95'
>>> msg()[1]
23

这篇文章主要介绍了 global的知识,仅作为一个了解。但在实际工作中,不建议使用 global,除非你自己很了解你使用 global 的目的。