应该尽量避免使用全局变量。不同的模块都可以自由的访问全局变量,可能会导致全局变量的不可预知性。对全局变量,如果程序员甲修改了_a的值,程序员乙同时也要使用_a,这时可能导致程序中的错误。这种错误是很难发现和更正的。
全局变量降低了函数或模块之间的通用性,不同的函数或模块都要依赖于全局变量。同样,全局变量降低了代码的可读性,阅读者可能并不知道调用的某个变量是全局变量。
但是某些时候,全局变量能够解决局部变量所难以解决的问题。事物要一分为二。
python里面全局变量有两种灵活的用法:
1 声明法
在文件开头声明全局变量variable,
在具体函数中使用该变量时,需要事先声明 global variable,否则系统将该变量视为局部变量。
CONSTANT = 0 (将全局变量大写便于识别)
def modifyConstant() :
global CONSTANT
print CONSTANT
CONSTANT += 1
return
if __name__ == '__main__' :
modifyConstant()
print CONSTANT
2 模块法
将需要定义的全局变量保存在一个模块中,这样,每次引用的时候,就从这个模块中取出来。这样的好处是突破了函数的限制,同时,保存和全局变量的原始值
例如,我们将全局变量定义在A.py中:
1
2
3
4
5
|
A.py a = 10; b = 3243; c = "hello,world" |
在B中引用该变量
1
2
3
4
5
6
7
8
9
10
11
12
|
B.py import A print(A.a,A.b,A.c); A.a = 200 A.c = "change value" print(A.a,A.b,A.c); |
输出结果为:
(10, 3243, 'hello,world')
(200, 3243, 'change value')
函数内改变了全局变量的数值
1
2
3
4
5
|
c。py import A print (A.a,A.b,A.c) |
输出结果:
(10, 3243, 'hello,world')
并没有因为在B中改变了全局变量的值而导致A模块中的数值发生变化!