python中的全局变量用什么代替_python程序中用类变量代替global 定义全局变量

在Python中,全局变量通常通过`global`关键字定义,但这种方式在多文件场景下可能引发问题。本文通过实例展示了全局变量在不同文件间的不一致行为,并提出使用类变量作为全局变量的替代方案,确保跨文件操作的一致性。
摘要由CSDN通过智能技术生成

在python编程中,一般使用global 关键字来定义全局变量,但是发现 global 关键字在涉及多个文件时,好像存在问题。

比如,单个文件下用global定义使用全局变量的情况 ,看下面的代码

#-*-coding: utf-8 -*-#from data_def import *

distance=34

classtest(object):def __init__(self):pass

#在类里面改变全局变量的值

defchange_1(self):globaldistance

distance=90

print("distance in class:", distance)#输出全局变量的值

defprint_value(self):globaldistanceprint("distance in class:", distance)#在函数里面使用和打印全局变量的值

deffunction_test():globaldistanceprint("global value in function", distance)

distance=234

print("global value in function",distance)

function_test()#在函数里面使用和改变全局变量的值 34->234

t=test()

t.print_value()#在类里面打印全局变量的值 234

t.change_1() #在类里面改变全局变量的值 234->90

程序运行结果如下:全局变量运行正确

global value in function 34

global value in function 234distance in class: 234distancein class: 90

下面把上述代码拆分成两个文件,data_def.py 和 main.py ,data_def.py 定义全局变量distance 和类 ,main.py 导入data_def.py。

data_def.py文件代码如下:

#-*-coding: utf-8 -*-

distance=34

classtest(object):def __init__(self):pass

#在类里面改变全局变量的值

defchange_1(self):globaldistance

distance=90

print("distance in class:", distance)#输出全局变量的值

defprint_value(self):globaldistanceprint("distance in class:", distance)

main.py文件代码如下:

#-*-coding: utf-8 -*-

from data_def import *

#在函数里面使用和打印全局变量的值

deffunction_test():globaldistanceprint("global value in function", distance)

distance=234

print("global value in function",distance)print("gloabl value in main:",distance) #主函数里面,全局变量为34

function_test() #在函数里面使用和改变全局变量的值 34->234

t=test()

t.print_value()#在类里面打印全局变量的值 输出为 34 并非是234,函数里面改变全局变量值不影响类里面全局变量的值???

t.change_1() #在类里面改变全局变量的值 34->90

程序运行结果:

gloabl value in main: 34

global value in function 34

global value in function 234distancein class: 34distancein class: 90

两次运行的结果存在出入,可以发现,用global 在不同文件间操作全局变量时,生成的结果和我们想象的不太一样,具体原因还不明确??知道原因的欢迎留言。

为此,可以考虑用类变量来定义全局变量。实现方式看以下代码。

第一个文件(data_def.py)定义两个类,第一个类定义全局变量distance ,第二个类为普通操作类

#-*-coding: utf-8 -*-#filename:data_def.py#构造类变量作为全局变量,代替global

classglobal_value():

distance=34

classtest(object):def __init__(self):pass

#在类里面改变全局变量的值

defchange_1(self):

global_value.distance=40

print("distance in class:", global_value.distance)defchange_2(self):

global_value.tail_dis=90

print("distance in class:",global_value.distance)#输出全局变量的值

defprint_value(self):print("distance in class:", global_value.distance)

第二个文件(main.py) 导入第一个文件定义的类,并进行变量操作

#-*-coding: utf-8 -*-

from data_def import *

#在函数里面使用和打印全局变量的值

deffunction_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) #打印出全局变量的初始值:34

t=test()

t.change_1()#在类里面改变全局变量的值:34->40

print("global value in main:",global_value.distance)

t.change_2()#在类里面改变全局变量的值:40->90

print("global value in main:",global_value.distance)

function_test()#在自定义函数里面使用和改变全局变量的值 90->234

global_value.distance=11 #在main主函数里面改变全局变量的值 234->11

t.print_value() #在类里面查看已经改变的全局变量的值 11

程序输出结果如下:

程序执行输出结果:global value in main: 34distancein class: 40

global value in main: 40distancein class: 40

global value in main: 40

global value in function 40

global value in function 234distancein class: 11

从输出结果可以看出,利用类变量的方式也可以实现全局变量的定义,并且可以跨文件操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值