Python
编程,在类的def
函数之间进行参数传递,可以采用队列、全局变量、类变量
等方法
一般情况下,使用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->234
t=test()
t.print_value() #在类里面打印全局变量的值 234
t.change_1() #在类里面改变全局变量的值 234->90
程序运行结果如下:全局变量运行正确
global value in function 34
global value in function 234
distance in class: 234
distance 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) #主函数里面,全局变量为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 234
distance in class: 34
distance in class: 90
两次运行的结果存在出入,可以发现,用global
在不同文件间操作全局变量时,生成的结果和我们想象的不太一样(也就说在main.py
中变量distance已经发生改变,但是回到data_def.py
中进行运行,显示distance仍然为原来的数值)。
为此,可以考虑用类变量来定义全局变量。实现方式看以下代码。
第一个文件(data_def.py
)定义两个类,第一个类定义全局变量distance
,第二个类为普通操作类
# -*-coding: utf-8 -*-
#filename:data_def.py
#构造类变量作为全局变量,代替global
class 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) #打印出全局变量的初始值: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: 34
distance in class: 40
global value in main: 40
distance in class: 40
global value in main: 40
global value in function 40
global value in function 234
distance in class: 11
从输出结果可以看出,利用类变量的方式也可以实现全局变量的定义,并且可以跨文件操作。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/2130.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...