在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->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 在不同文件間操作全局變量時,生成的結果和我們想象的不太一樣,具體原因還不明確??知道原因的歡迎留言。
為此,可以考慮用類變量來定義全局變量。實現方式看以下代碼。
第一個文件(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
從輸出結果可以看出,利用類變量的方式也可以實現全局變量的定義,並且可以跨文件操作。