Python使用全局vs指定模块

时间:2011-12-30 13:18:24

标签: python variables module python-3.x global

想知道是否有人对使用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。

2 个答案:

答案 0 :(得分:5)

每次都使用globalglobal关键字是一种明显且易于识别的模式,用于在模块级别修改某些内容。从sys.modules给一个模块引用自己似乎是一种不必要的错综复杂的方式,并且很可能会混淆下一个看它的程序员。

答案 1 :(得分:3)

  • 性能:使用global样式将稍微更快,因为它只需要一个名称查找而不是两个(只在很多的紧密循环中)成千上万)。

  • 样式:mod.xxx样式反映了您从已导入的另一个模块访问全局变量的方式:

`

import foo
foo.eggs = 'scrambled'

global方法更常见,但您的mod.xxx方法也易于理解且易读。