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->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

從輸出結果可以看出,利用類變量的方式也可以實現全局變量的定義,並且可以跨文件操作。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM