[英]Unable to see changes to a global variable from a different Python module
考慮以下兩個文件的 Python 應用程序,即app.py
:
#!/usr/bin/env python3
import other
MY_DICT = {'initial': 10}
def main():
print('before main:', MY_DICT)
MY_DICT['foo'] = 20
MY_DICT['bar'] = 30
print('after changes:', MY_DICT)
other.check_dict()
print('back in main:', MY_DICT)
if __name__ == '__main__':
main()
和other.py
:
def check_dict():
from app import MY_DICT
print('inside other:', MY_DICT)
我想讓MY_DICT
中的app.py
在other.py
中可見。 它是可見的,但我無法更改它。 這是 output 如果我用 Python 3.8.0 運行./app.py
:
before main: {'initial': 10}
after changes: {'initial': 10, 'foo': 20, 'bar': 30}
inside other: {'initial': 10}
back in main: {'initial': 10, 'foo': 20, 'bar': 30}
當從other.py
檢查時,不僅MY_DICT
回到了它最初的 state ,當我回到 main.py 時,它也回到了改變后的main.py
。 這里發生了什么,我如何使它成為一個真正的全局變量?
我已經讀過這個問題並確保我在check_dict
中重新導入MY_DICT
。
解決方案:不要那樣做。 不要將入口點 Python 腳本作為模塊導入。 創建一個單獨的小文件,該文件永遠不會被任何其他人導入,並且旨在從 shell 運行。
當您以 ./app.py 運行應用程序時, ./app.py
實際上將您的app.py
作為名為__main__
的模塊加載。 但是你的other.py
說import app
,所以它導入了一個名為app
的單獨模塊,它只是巧合地從同一個源文件app.py
。
現在您的程序中加載了兩個app.py
實例,每個實例都有一個單獨的MY_DICT
。 您的__main__
模塊看到自己的sys.modules['__main__'].MY_DICT
,但other
模塊訪問sys.modules['a'].MY_DICT
。 您可以通過在main()
和check_dict()
中打印id(MY_DICT)
來檢查這一點:它們是不同的。 在此處查看更多詳細信息。
從技術上講,您可以import __main__ as app
到other.py
中。 但是,當有人試圖以任何其他不涉及啟動./app.py
的方式使用other.py
時,這將中斷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.