2017-06-04 50 views
0

我觀察到,即使你通過from e.g爲什麼模塊通過「從」導入時無法訪問的名字

from b import x 

整個模塊導入Python模塊被加載。它可以在sys.modules字典中看到。那麼爲什麼我們的程序無法訪問模塊b的名稱。我錯過了什麼?

它看起來像主(頂級)文件的名稱空間沒有模塊名稱。

但我無法驗證這一點,因爲我無法看到主文件命名空間。它也不好,只是從__dict__刪除一項沒有很多好處。有人可以詳細解釋這一點嗎?

+1

爲什麼*它會被訪問?通過使用'from b import x',你指定你*只*希望將'x'添加到當前名稱空間。如果你想要所有的'b',加入'import b'。 – jonrsharpe

+0

@jonrsharpe我明白,如果我使用'import b',我可以訪問b,但是我正在尋找一些原因,爲什麼保持模塊名稱不可訪問(在python中)是不合邏輯的,即使我們想直接使用模塊的屬性?這個執行的開銷是多少? – hunch

+2

好的*顯式優於隱式*,例如。另一方面,這就是參考文獻所說的:https://docs.python.org/3/reference/simple_stmts.html#the-import-statement。這並不是說它不會*「保持模塊名稱可訪問」*,但它並不能使它開始。 – jonrsharpe

回答

1

因爲這就是語法的作用;它只會導入您指定的名稱,而不是包含的模塊。如果你想要模塊本身,只需要做import b

+0

據我所知,如果我使用導入b我會得到訪問b,但我正在尋找一些原因,爲什麼是即使我們想使用模塊的直接屬性,保持模塊名稱可訪問(在python中)也是不合邏輯的?這個執行的開銷是多少? – hunch