2017-06-15 74 views
-1

我與定義一個全局變量包由包中的所有模塊使用掙扎更新Python中的全局包變量。 我有這樣的代碼:我如何在運行時

# my_module.py 
from .__main__ import GLOBAL_VAR 

def print_global(): 
    print(GLOBAL_VAR) 


# __main__.py 
from my_package import my_module 
GLOBAL_VAR = '' 

def main(): 
    global GLOBAL_VAR 
    GLOBAL_VAR = 'myvalue' 
    my_module.print_global() 

if __name__ == '__main__': 
    main() 

我希望my_module.print_global()打印myvalue,而是它打印一個空字符串(初始值)。 我也試過在main()導入模塊後GLOBAL_VAR的聲明,但是它並沒有幫助。

您能否告訴我如何從main()重新定義GOBAL_VAR並使其可用於包裝中的所有子模塊?我還會接受任何其他選項,而不是使用global關鍵字。

編輯:建議的類似的問題只是部分地回答了這一個。關於redefinig globals沒有任何關係。

+0

爲什麼你會需要一個爛攤子?爲什麼不只是'GLOBAL_VAR ='myvalue'? –

+0

@AzatIbrakov我想要一個變量可用於包中的所有模塊和我不想將其傳遞到所有的功能/對象作爲一個額外的參數。有什麼建議麼? – makeiteasy

+0

你的變量來自哪裏?從環境/文件/互聯網/數據庫?你需要閱讀一次嗎? –

回答

0

我不知道這是做正確的方式,但是這是我如何做它的工作:

  1. 感動GLOBAL_VAR到一個單獨的文件settings.py消除圓形進口,由@作爲建議Nearoo。

  2. main()重新定義settings.GLOBAL_VAR我想要的方式。

  3. ,然後才進口my_module

同樣,這裏的問題是,我不知道最初的變量值,並在運行時將其定義到所有模塊時需要使用。

這就是現在的代碼的樣子:

# settings.py 
GLOBAL_VAR = '' 


# my_module.py 
from .settings import GLOBAL_VAR 

def print_global(): 
    print(GLOBAL_VAR) 


# __main__.py 
from my_package import settings 

def main(): 
    settings.GLOBAL_VAR = 'myvalue' 

    from my_package import my_module 
    my_module.print_global() 

if __name__ == '__main__': 
    main()