2009-08-09 52 views

回答

5

所有這一切如下語句:

v1 = 0 

可以做名稱v1被綁定到該對象0。它不能影響不同的模塊。

如果我在那裏使用不熟悉的術語,我想我可能是,我強烈建議您閱讀Fredrik Lundh的優秀文章Python Objects: Reset your brain

1

是的,你只需要正確地訪問它(和不使用進口*,它是邪惡的)

c.py:

import a 
print a.v1 # prints 1 
a.v1 = 0 
print a.v1 # prints 0 
2

from ... import *形式基本上是用於方便的交互使用在口譯員提示下:你最好不要在其他情況下使用它,因爲它只會給你帶來問題。

事實上,內部風格指南,在我的僱主更進一步,建議總是導入模塊,從模塊中(模塊推薦從內包裝是OK,實際上)從來沒有的內容。因此,在我們的代碼庫中,對導入的東西的引用始終是限定名稱(themod.thething),而不是裸數據名(它始終指內置的,同一模塊的全局變量或本地數據)。這使得代碼更清晰,更具可讀性,並避免了各種細微的異常。

當然,如果一個模塊的名字太長,導入中的一個as子句,爲了導入模塊的目的而給它一個更短和更方便的別名就沒有問題。但是,用您的單字母模塊名稱,這將不需要;-)。

所以,如果你遵循的方針,始終導入模塊(而不是從它裏面的東西),c.v1將始終指同樣的事情a.v1b.v1,無論是用於獲取和設置:這裏有一個潛在的微妙異常避免了蝙蝠的權利 - )

記住的Python(做import this在提示符的解釋,看到這一切)的禪的最後一點:

Namespaces are one honking great idea -- let's do more of those! 

導入整個模塊(未位,從它內部的作品)保留其完整性amespace,正如通過合格(虛線)名稱引用導入模塊中的東西一樣。這是一個鳴喇叭偉大的想法:做更多的是 - )

+0

所以你永遠不會「從datetime導入日期時間」;你總是導入日期時間,並且每次輸入「datetime.datetime」?這是一個糟糕的風格指南。 –

+0

@Glenn,對你的問題,「是」;根據您的意見,我不知道任何Python風格指南都被更多的Python提交者(包括Guido ;-)主動接受(並通過「可讀性評論」強制執行),而我們的Python SW似乎相當成功(包括時間市場,可維護性,性能[cfr YouTube,基於Python和快速]等),所以我想知道你基於哪種經驗數據。是的,PEP 8確實接受「導入課程」,但Guido寫道,在他加入Google之前,遇到(並接受並強制執行)我們的真棒指導! - ) –

+1

寫作「datetime.datetime」非常醜陋; 「datetime.datetime.now」更醜陋;鼓勵醜陋代碼的編碼風格很糟糕。更廣泛地說,當模塊本身是名稱空間時,將模塊作爲名稱空間是無用的。導入作爲命名空間的級別 - 對於許多模塊,這是模塊本身,但對於像datetime這樣的類,它是類。 –