2011-12-30 79 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