[英]Accessing variable in module / Module scope in Python
我想在模塊內的應用程序中使用定義的變量。
文件夾結構:
myapp.py
modules / checkargs.py
modules / init .py(一個空文件)
主應用程序(myapp.py):
_PARAMETERS = {
'stuff': 'here'
}
from modules.checkargs import checkargs
if __name__ == "__main__":
checkargs(sys.argv[1:])
checkargs.py:
def checkargs(argv):
global _PARAMETERS;
#more Python insanity here
錯誤:
NameError:全局名稱“ _PARAMETERS”未定義
通常,您應該避免這種編程風格。 模塊不應依賴於其他模塊中定義的全局變量。 更好的解決方案是將_PARAMETERS
傳遞到checkargs
,或將_PARAMETERS
移至可以由多個模塊共享的文件。
一般來說,依靠全局變量是一個壞主意。 也許最好的解決方案是將PARAMETERS
直接傳遞到您的checkargs
函數中。
# checkargs.py
def checkargs(argv, parameters):
...
# myapp.py
if __name__ == "__main__":
checkargs(sys.argv[1:], _PARAMETERS)
如果您有要在模塊之間共享的數據,則可以將該數據放在每個其他模塊導入的第三個模塊中:
# modules/shared.py
PARAMETERS = {...}
# myapp.py
from modules.shared import PARAMETERS
# checkargs.py
from modules.shared import PARAMETERS
還有其他解決方案,盡管我認為上述兩種解決方案是最好的。 例如,您的主程序可以將參數復制到checkargs
模塊,如下所示:
# myapp.py
import checkargs
checkargs._PARAMETERS = _PARAMETERS
...
您也可以讓checkargs
直接引用主模塊中的值,但這需要循環導入。 應避免循環進口。
為什么要定義它? 它來自其他模塊。 在checkargs.py中,您需要執行以下操作:
from myapp import _PARAMETERS
然而:
_
命名,因為這意味着私有/受保護的變量。 myapp
傳遞到checkargs
函數中,而不是將其導入那里。 如果不這樣做,那么您將創建一個循環導入,這在邏輯上是可怕的,實際上是行不通的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.