想知道是否有人对使用Python的全局与引用模块本身有任何想法。虽然在过去我在需要时使用全局,但我发现第二种方法更加清晰(并且最近倾向于支持这种语法):
import sys
mod = sys.modules[__name__]
counter = 0
def incrementGlobal():
global counter
counter += 1
def incrementMod():
mod.counter += 1
显然他们两个都很好,但如果有人有任何强烈的意见(更多的是pythonic,表演等),我很乐意听到他们。
顺便说一下,在模块自然地封装了单个类的所有方法和属性,而不是引用incrementmodule.IncrementClass.counter的情况下,我最终会使用其中任何一个,我只能使用incrementmodule.counter。
答案 0 :(得分:5)
每次都使用global
。 global
关键字是一种明显且易于识别的模式,用于在模块级别修改某些内容。从sys.modules
给一个模块引用自己似乎是一种不必要的错综复杂的方式,并且很可能会混淆下一个看它的程序员。
答案 1 :(得分:3)
性能:使用global
样式将稍微更快,因为它只需要一个名称查找而不是两个(只在很多的紧密循环中)成千上万)。
样式:mod.xxx
样式反映了您从已导入的另一个模块访问全局变量的方式:
`
import foo
foo.eggs = 'scrambled'
global
方法更常见,但您的mod.xxx
方法也易于理解且易读。