我应该用Python命名我的全局模块?

时间:2010-01-21 07:58:03

标签: python naming-conventions global-variables

我正在用Python编写应用程序,并且我有许多通用变量(例如对主窗口的引用,用户设置和UI中的活动项列表),这些变量必须是可从程序 1 的所有部分访问。我刚刚意识到我已经命名了模块globals.py,我正在导入包含这些变量的对象,并在我的文件顶部添加from globals import globals语句。

显然,这是有效的,但我对于将我的全局对象命名为与Python内置的相同有点怀疑。不幸的是,我想不出一个更好的命名约定。 globalall也是Python内置的,universal似乎不精确,state并不是正确的想法。我倾向于staticenv,尽管两者在计算机术语中都有特定含义,这表明了不同的概念。

那么,(在Python中)你会将包含变量全局的模块称为所有其他模块吗?

1 我意识到我可以将这些(或包含它们的单个对象)作为变量传递给我调用的每个其他函数。这最终是不可行的,不仅仅是因为它使启动代码和函数签名真的很难看。

6 个答案:

答案 0 :(得分:3)

我会尽量避免使用这样的全局容器模块,而是将这些变量放入自己的模块中,然后可以从系统的所有部分导入。

例如,主窗口可能会进入main.py中的变量。用户设置可以进入usersettings.py,这将提供查看和更改设置的功能。

如果系统的另一部分需要访问用户设置,那么这很简单:

from usersettings import get_setting, set_setting
...
# Do stuff with settings

类似的方法可能可用于需要全局访问的其他内容。这样可以更清晰地分离关注点和更可测试的代码,因为您可以独立测试模块,而不必始终依赖globals模块。

答案 1 :(得分:1)

`config` or `settings`

答案 2 :(得分:1)

我称之为env。某人将其与os.environ混淆的风险很小(特别是如果您整理代码以便可以将其称为myapp.environ)。

我也会通过myapp.environ使一个属性暴露出来,这样我就可以在需要的时候把断点放在setter中。

答案 3 :(得分:0)

global是关键字,而不是内置关键字。 'globals'不是关键字,但内置函数。它可以被分配,但是不好的做法。像 pylint pychecker 这样的代码检查程序可以捕获这些意外分配。 config怎么样?

答案 4 :(得分:0)

toptop_level

答案 5 :(得分:0)

from globals import Globals

这将解决冲突,并遵循PEP 8建议。

此外,在其他情况下,Roget的同义词库是你的朋友。我总是在附近保留一份副本。