1. 程式人生 > >python跨模組的全域性變數引用

python跨模組的全域性變數引用

在python面向物件開發的過程中往往會有###全域性變數的問題,對於新入局小白來說確實 是一個不小的問題,接下來可以給大家提供一種思路。

儘管某些書籍上總是說避免使用全域性變數,但是在實際的需求不斷變化中,往往定義一個全域性變數是最可靠的方法,但是又必須要避免變數名覆蓋。

Python 中 global 關鍵字可以定義一個變數為全域性變數,但是這個僅限於在一個模組(py檔案)中呼叫全域性變數:

我們知道Python使用變數的時候是可以直接使用的,x=[] ,y=2,z=“123”,而不需要先定義(var x; var y=2;var z=‘222’),這樣的話,在函式內部就無法操作外部的變量了,因為它總會認為你是在定義一個新變數並且賦值,不過 global 就可以解決這個問題。
程式碼如下:

x = 6
def func():
    global x #定義外部的x
    x = 1

func()
print (x)
#輸出1

這個時候,即使你在另外一個py檔案 再次使用 global x 也是無法訪問到的,因為在這個py模組中並沒有一個叫做x的變數,於是就會報錯 未定義。

那麼我們怎麼辦?

借鑑global 關鍵字的思路,既然在一個檔案裡面可以生效的話,那麼我們就專門為全域性變數定義一個“全域性變數管理模組”就好了
如下:

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

def _init():#初始化
    global _global_dict
    _global_dict = {}


def set_value(key,value):
    """ 定義一個全域性變數 """
    _global_dict[key] = value


def get_value(key,defValue=None):
  """ 獲得一個全域性變數,不存在則返回預設值 """
    try:
        return _global_dict[key]
    except KeyError:
        return defValue

相信如果你看懂了就應該知道思路了,利用global的單獨檔案全域性性,從而可以定義在一個檔案中的全域性變數,然後這個單個檔案的全域性變數可以儲存多個檔案的共同全域性變數操作的時候,以Key對Value 的方法操作,我相信大家都懂。
程式碼如下:


    # -*- coding:utf-8 -*-
    
    from YourPage import gol
    
    gol._init()#先必須在主模組初始化(只在Main模組需要一次即可)
    
    
    #定義跨模組全域性變數
    gol.set_value('CODE','UTF-8')
    gol.set_value('PORT',80)
    gol.set_value('HOST','127.0.0.1')

然後其他的任何檔案只需要匯入即可使用:

from YourPage import gol

#不需要再初始化了
ROOT = gol.get_value('ROOT',80)
CODE = gol.get_value('CODE')

就這麼簡單~

就這樣就可以實現跨檔案的全域性變數使用;

並且還有一個簡單但是強大的全域性變數管理器,你可以自己添油加醋,實現一些比如全域性變數禁止直接修改,禁止修改某些只可讀的全域性變數等等。

	以上內容轉載自https://www.cnblogs.com/suwings/p/6358061.html