我正在用Python编写应用程序,并且我有许多通用变量(例如对主窗口的引用,用户设置和UI中的活动项列表),这些变量必须是可从程序 1 的所有部分访问。我刚刚意识到我已经命名了模块globals.py
,我正在导入包含这些变量的对象,并在我的文件顶部添加from globals import globals
语句。
显然,这是有效的,但我对于将我的全局对象命名为与Python内置的相同有点怀疑。不幸的是,我想不出一个更好的命名约定。 global
和all
也是Python内置的,universal
似乎不精确,state
并不是正确的想法。我倾向于static
或env
,尽管两者在计算机术语中都有特定含义,这表明了不同的概念。
那么,(在Python中)你会将包含变量全局的模块称为所有其他模块吗?
1 我意识到我可以将这些(或包含它们的单个对象)作为变量传递给我调用的每个其他函数。这最终是不可行的,不仅仅是因为它使启动代码和函数签名真的很难看。
答案 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)
top
? top_level
?
答案 5 :(得分:0)
from globals import Globals
这将解决冲突,并遵循PEP 8建议。
此外,在其他情况下,Roget的同义词库是你的朋友。我总是在附近保留一份副本。