Python使用全局指定模块与指定模块
想知道是否有人对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。
每次去global
。 global
关键字是一个显而易见的且容易识别的模块级别的修改模式。从sys.modules
给模块提供自己的参考看起来似乎是一种不必要的复杂方式,并且很可能会混淆下一个看它的程序员。
性能:使用
global
风格会非常轻微速度更快,因为它只需要一个名称查找,而不是两个。(仅此事的许多成千上万一个紧密的循环)。风格:
mod.xxx
风格反映你会从你进口了另一个模块访问全局方式:
`
import foo
foo.eggs = 'scrambled'
的global
方法是比较常见的,但你的mod.xxx
方法也容易理解并且非常可读。
没有downvote,但使用'global'远比使用'mod.xxx'更常见,所以我认为使用'global'更清晰,因为这几乎是所有人都期望的。 – EOL 2011-12-30 14:57:02
@EOL:同意'全球'是主流的方法,并且可以立即识别。 – 2011-12-30 15:26:50
第二个如何更清晰? – delnan 2011-12-30 13:29:16
我想这不是更清楚,但我更喜欢它,因为它很明显是一个模块级别的变量正在修改,而不是本地的(让你不必检查变量是否在全局声明顶部) – gnr 2011-12-30 13:40:33
如果'global'和这个任务很远,那么你的清晰度问题会比这个更糟糕;) – delnan 2011-12-30 13:43:56