一个用于全局参数的python模块 - 这是一个好习惯吗?

时间:2010-08-03 21:23:20

标签: python

我是一名机械工程专业的学生,​​我正在使用PyODE构建物理模拟。

而不是从一个文件运行所有内容,我想组织模块中的东西,所以我有:

  • main.py
  • callback.py
  • helper.py

当我意识到helper.py需要从main引用变量时遇到了问题,但是main是一个导入帮助器!

所以我的解决方案是创建第4个文件,其中包含变量并仅导入外部模块(例如时间和随机)。

所以我现在有:

  • main.py
  • callback.py
  • helper.py
  • parameters.py

并且所有脚本都有:import parameters并使用:parameters.fooparameters.bar

这是一种可以接受的做法,还是一种让python程序员呕吐的可靠方法? :)

请告诉我这是否有意义,或者是否有更明智的做法!

谢谢, -Leav

6 个答案:

答案 0 :(得分:3)

每个地方所需的常量,配置和包含的单独“全局”文件都可以。但是当它们包含实际的可变变量时,它们就不是一个好主意。考虑让文件与函数返回值和参数进行通信。这促进了封装,并使您的代码不会变得混乱。

文件之间的清晰通信使它们更容易理解,并使更明显的事情发生。当你使用变量并且没有人知道它们来自哪里时,事情会变得非常烦人。 :)

答案 1 :(得分:2)

嗯,我认为如果发生这种情况就不会发生:“意识到helper.py需要从main引用变量”,你的帮助函数应该独立于你的“主代码”,否则我认为它的丑陋和更多就像设计失败一样。

答案 2 :(得分:1)

我尝试设计我的代码,使其看起来很像金字塔。我发现,这导致代码更清晰。

答案 3 :(得分:0)

我不太确定这是不是很好,但如果你使用课程,我不明白为什么会出现问题。或者我错过了什么?

如果您希望能够独立地运行每个脚本,这就是阻止您进行面向对象的原因,那么您可以在脚本结束时执行以下操作。

if __name__ == '__main__':
    # Code that you want to run when the script is executed.
    # This block will not be executed if the script is imported.

阅读有关Python here中的类的更多信息。

答案 4 :(得分:0)

您应该阅读Dependency Inversion

答案 5 :(得分:0)

似乎你想要的是组织组件之间的各种依赖关系。最好以面向对象的方式表达这些依赖关系。而不是通过导入模块和全局状态来进行,在对象中编码这些状态并传递它们。

阅读对象和类以及如何用Python编写它们;我可能会从那里开始。