2011-12-30 84 views
5

想知道是否有人對Python的全局使用和引用模塊本身有任何想法。雖然過去我使用的全局需要的時候,我發現它有點更清晰的做第二個方法(和最近傾向於支持這種語法):Python使用全局指定模塊與指定模塊

import sys 
mod = sys.modules[__name__] 

counter = 0 

def incrementGlobal(): 
    global counter 
    counter += 1 

def incrementMod(): 
    mod.counter += 1 

顯然他們都做工精細,但如果有人有什麼強烈的意見(什麼是更pythonic,表演等),我很樂意聽到他們。

Btw我結束了使用其中的任何一種情況下,模塊自然地封裝所有的方法和屬性將是一個單一的類,而不是引用incrementmodule.IncrementClass.counter我可以只使用incrementmodule.counter。

+2

第二個如何更清晰? – delnan 2011-12-30 13:29:16

+0

我想這不是更清楚,但我更喜歡它,因爲它很明顯是一個模塊級別的變量正在修改,而不是本地的(讓你不必檢查變量是否在全局聲明頂部) – gnr 2011-12-30 13:40:33

+3

如果'global'和這個任務很遠,那麼你的清晰度問題會比這個更糟糕;) – delnan 2011-12-30 13:43:56

回答

5

每次去globalglobal關鍵字是一個顯而易見的且容易識別的模塊級別的修改模式。從sys.modules給模塊提供自己的參考看起來似乎是一種不必要的複雜方式,並且很可能會混淆下一個看它的程序員。

3
  • 性能:使用global風格會非常輕微速度更快,因爲它只需要一個名稱查找,而不是兩個。(僅此事的許多成千上萬一個緊密的循環)。

  • 風格:mod.xxx風格反映你會從你進口了另一個模塊訪問全局方式:

`

import foo 
foo.eggs = 'scrambled' 

global方法是比較常見的,但你的mod.xxx方法也容易理解並且非常可讀。

+2

沒有downvote,但使用'global'遠比使用'mod.xxx'更常見,所以我認爲使用'global'更清晰,因爲這幾乎是所有人都期望的。 – EOL 2011-12-30 14:57:02

+0

@EOL:同意'全球'是主流的方法,並且可以立即識別。 – 2011-12-30 15:26:50

相關問題