2016-11-14 38 views
1

我來自this thread這是有用的,但不夠。我的情況稍有不同,但最重要的是我的情況:我正在重構1000行以上的代碼(在一個文件中),因此,更改某個名稱可能會很快變得痛苦。全局變量與3個文件之間的導入

所以我拆我的文件到3:

中,我已經定義的所有全局變量
  • settings.py(有 很多 - 主要是布爾和字符串)
  • 同步。 PY可以改變 它們的值
  • groups.py這也可以改變他們

我會在這裏簡化的東西。

settings.py:

MY_VAR = "plane" 

synchro.py:

from settings import * 
import groups 

def main(): 
    global MY_VAR 
    MY_VAR = "boat" 
    groups.update() 

groups.py:

from settings import * 

def update(): 
    print MY_VAR # will print "plane" instead of "boat" 

我也試着寫import settings代替from settings import *但在這種情況下, python告訴我global settings.MY_VAR是一個錯誤,並且它不識別settings.MY_VAR如果我刪除global行。

那麼,最快/最簡單的方法是什麼?

感謝您的幫助

回答

0

你應該做如下圖所示,它不是那麼建議做from settings import *,它造成的命名空間污染,使事情變得更難以後調試。 雖然我儘量減少,如果全球使用我通常只使用同一個文件內全球可能

settings.py

MY_VAR = "plane" 

synchro.py:

import settings 
import groups 

def main(): 
    # no need to declare global here, access trough settings namespace instead 
    settings.MY_VAR = "boat" 
    groups.update() 

groups.py:

import settings 

def update(): 
    print settings.MY_VAR # will print "plane" at first, after synchro main, MY_VAR should carry 'boat' 
+0

謝謝,它的工作! –