您好,欢迎来到吉趣旅游网。
搜索
您的当前位置:首页python程序中用类变量代替global定义全局变量

python程序中用类变量代替global定义全局变量

来源:吉趣旅游网
python程序中⽤类变量代替global定义全局变量

在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

本站由北京市万商天勤律师事务所王兴未律师提供法律服务