每當我想我理解Python導入的細節(最後!)時,新的東西讓我回到了現實。請看看這個簡單的例子:單個文件 - 兩個模塊
文件t1.py
:
import t2
x = "waiting for init"
def init():
global x
x = "OK"
if __name__ == '__main__':
init()
print("x =", x)
t2.print_x()
注意不要使用不正確from t1 import x
,這裏是文件t2.py
:
import t1
def print_x():
print("t1.x =", t1.x)
反正輸出不我期望的:
$ python3 t1.py
x = OK
t1.x = waiting for init
因此x in t1
與t1.x
不同!
經過一番調查這個版本的t2.py
幫我一點點:
import t1
def print_x():
import sys
print(sys.modules['t1'].x)
print(sys.modules['__main__'].x)
這兩個打印輸出:
waiting for init
OK
我覺得很困惑。單個文件t1.py
同時被稱爲兩個不同的模塊:t1
和__main__
。你能向我解釋一下它的含義嗎?在發佈的代碼中必須更改什麼才能獲得t1.x = "OK"
?
我不確定它是否會影響此特定問題,但您有循環導入 - t1導入t2,t2導入t1。不要這樣做。 –