簡體   English   中英

導入模塊范圍和變量

[英]Import module scope and variables

我的問題是關於python 2.7名稱空間和模塊導入。 我的問題是理解為什么這樣做:如果我有一個模塊文件memory.py:

memory={}
def insert_into(a,b):
   memory[a]=b

然后兩個文件mod1.py和mod2.py具有類似的代碼:mod1.py:

import memory
memory.insert_into('a',1)

mod2.py:

 import memory
 memory.insert_into('b',2)

最后是我作為腳本運行的test.py文件:

import mod1,mod2

如果我以某種方式測試:

mod1.memory.memory is mod2.memory.memory

它返回True。 這是預期的嗎? 在什么時候mod1和mod2的名稱空間會發生糾纏? 抱歉,如果我的問題沒有道理,那是我第一次。

在Python中,模塊本身就像一個單例。 您所看到的就是這種效果。

您可能會注意到,實際上使用mod1.memory.memorymod2.memory.memory並沒有更新這些模塊中的memory字典,但是它們中的每一個都是module對象,並且都引用相同的對象(一個空字典( memory={} )),並且當且僅當x和y是同一對象時, x is y才為true。

因此,在test.py您可以嘗試:

print mod1.memory.memory
print mod2.memory.memory

他們一點也不被弄亂。 您只需在兩個位置導入同一對象,自然Python會報告它是相同的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM