在python编程中,⼀般使⽤global 关键字来定义全局变量,但是发现 global 关键字在涉及多个⽂件时,好像存在问题。⽐如,单个⽂件下⽤global定义使⽤全局变量的情况 ,看下⾯的代码
# -*-coding: utf-8 -*-#from data_def import *distance=34
class test(object): def __init__(self): pass
#在类⾥⾯改变全局变量的值 def change_1(self): global distance distance=90
print(\"distance in class:\", distance) #输出全局变量的值 def print_value(self): global distance
print(\"distance in class:\", distance)#在函数⾥⾯使⽤和打印全局变量的值def function_test(): global distance
print(\"global value in function\", distance) distance=234
print(\"global value in function\",distance)
function_test() #在函数⾥⾯使⽤和改变全局变量的值 34->234t=test()
t.print_value() #在类⾥⾯打印全局变量的值 234t.change_1() #在类⾥⾯改变全局变量的值 234->90
程序运⾏结果如下:全局变量运⾏正确
global value in function 34global value in function 234distance in class: 234distance in class: 90
下⾯把上述代码拆分成两个⽂件,data_def.py 和 main.py ,data_def.py 定义全局变量distance 和类 ,main.py 导⼊data_def.py。data_def.py⽂件代码如下:
# -*-coding: utf-8 -*-distance=34
class test(object): def __init__(self): pass
#在类⾥⾯改变全局变量的值 def change_1(self): global distance distance=90
print(\"distance in class:\", distance) #输出全局变量的值 def print_value(self): global distance
print(\"distance in class:\", distance)
main.py⽂件代码如下:
# -*-coding: utf-8 -*-from data_def import *
#在函数⾥⾯使⽤和打印全局变量的值def function_test(): global distance
print(\"global value in function\", distance) distance=234
print(\"global value in function\",distance)
print(\"gloabl value in main:\",distance) #主函数⾥⾯,全局变量为34function_test() #在函数⾥⾯使⽤和改变全局变量的值 34->234t=test()
t.print_value() #在类⾥⾯打印全局变量的值 输出为 34 并⾮是234,函数⾥⾯改变全局变量值不影响类⾥⾯全局变量的值???t.change_1() #在类⾥⾯改变全局变量的值 34->90
程序运⾏结果:
gloabl value in main: 34global value in function 34global value in function 234distance in class: 34distance in class: 90
两次运⾏的结果存在出⼊,可以发现,⽤global 在不同⽂件间操作全局变量时,⽣成的结果和我们想象的不太⼀样,具体原因还不明确??知道原因的欢迎留⾔。
为此,可以考虑⽤类变量来定义全局变量。实现⽅式看以下代码。
第⼀个⽂件(data_def.py)定义两个类,第⼀个类定义全局变量distance ,第⼆个类为普通操作类
# -*-coding: utf-8 -*-#filename:data_def.py
#构造类变量作为全局变量,代替globalclass global_value(): distance=34
class test(object): def __init__(self): pass
#在类⾥⾯改变全局变量的值 def change_1(self):
global_value.distance=40
print(\"distance in class:\", global_value.distance) def change_2(self):
global_value.tail_dis=90
print(\"distance in class:\",global_value.distance) #输出全局变量的值 def print_value(self):
print(\"distance in class:\", global_value.distance)
第⼆个⽂件(main.py) 导⼊第⼀个⽂件定义的类,并进⾏变量操作
# -*-coding: utf-8 -*-from data_def import *
#在函数⾥⾯使⽤和打印全局变量的值def function_test():
print(\"global value in function\", global_value.distance) global_value.distance=234
print(\"global value in function\",global_value.distance)
print(\"global value in main:\",global_value.distance) #打印出全局变量的初始值:34t=test()
t.change_1() #在类⾥⾯改变全局变量的值:34->40print(\"global value in main:\",global_value.distance)
t.change_2() #在类⾥⾯改变全局变量的值:40->90print(\"global value in main:\",global_value.distance)
function_test() #在⾃定义函数⾥⾯使⽤和改变全局变量的值 90->234global_value.distance=11 #在main主函数⾥⾯改变全局变量的值 234->11t.print_value() #在类⾥⾯查看已经改变的全局变量的值 11
程序输出结果如下:
程序执⾏输出结果:global value in main: 34distance in class: 40global value in main: 40distance in class: 40global value in main: 40global value in function 40global value in function 234distance in class: 11
从输出结果可以看出,利⽤类变量的⽅式也可以实现全局变量的定义,并且可以跨⽂件操作。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- jqkq.cn 版权所有 赣ICP备2024042794号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务