为多个脚本和最佳实践声明变量

时间:2017-07-05 14:10:00

标签: python python-2.7

在python中为多个脚本放置变量的最佳方法是什么?

我有以下脚本:

  • main.py:此脚本用于声明one.pytwo.pythree.py的公共变量。还以交互方式和定义的输入文件从用户那里获取输入。

  • config.py:此脚本包含所有三个脚本配置输入,如ip-adress,ports details。等

  • one.py:我已经使用类编写了此脚本,它接受来自main.pyconfig.py的输入。

  • two.py:我已经使用类编写了此脚本,它接受来自main.pyconfig.py的输入。

  • three.py:我已经使用类编写了此脚本,它接受来自main.pyconfig.py的输入。

  • run.py:此脚本加载one.pytwo.pythree.py的类对象,并调用其中定义的函数。

    < / LI>

main.py

list1 = []
a = "common for one.py,two.py and three.py"

one.py

import main
main.list1.append("1")

two.py

import main
main.list1.append("2")

three.py

import main
main.list1.append("3")

运行脚本:

run.py

import main
import one
import two
import three
# start performing
#call  one script functions
#call  two script functions
#call  three script functions

我需要你的一些建议。

  1. 我正在以正确的方式做这件事吗?

  2. 我的脚本是否易于日后维护?

  3. 因为我将变量list1放在main.py中。它会先 在one.py中添加一些值,然后two.py将访问它。 我怀疑是two.py是导入main.py,在这种情况下它没有 用空列表值覆盖?我测试了它,它工作正常。 但我仍然希望将您的建议用于最佳实践。

2 个答案:

答案 0 :(得分:0)

这看起来不容易维护,因为附加到列表中的值仅在调用main中的import时发生。以错误的顺序导入它们,或者忘记导入其中一个,你会得到意想不到的结果。

一般来说,在脚本之间共享变量是可以的,但是各个模块不应该编辑共享变量的值,而是每个模块应该单独负责其变量的值。

答案 1 :(得分:0)

是的,我认为你所做的事情基本上没问题。我会重命名几个脚本以更好地指出他们的角色:我会重命名run.py并将其设为main.py,并将您所谓的main.py称为common.py。但是,为了便于讨论,我将使用您在问题中使用的脚本名称。

您不必担心main.py每次list1变量imported变量中的内容。import。这是因为sys.modules模块的结果是&#34;缓存&#34;在import中,其中的顶级代码仅在第一次import时执行。如果另一个脚本module再次出现其中一个脚本,则会使用第一次保存在缓存版本中的结果。您可以将加载的模块视为run.py类的"singleton"个实例(实际上它们是types.ModuleType)。

如果one中依赖于某个顺序导入模块twothreeimport,那么我会main 1}}它们都在您的import模块中,因此其他脚本不必担心它(排序)。这样,其他脚本只需list1即可使用它们。

以上并不是说你的设计无法改进。看起来你基本上使用的是全局变量,这些变量长期以来一直被视为“坏事”#34;出于多种原因(见Global Variables Are Bad)。为了避免这种情况,class的直接使用需要用一些新的自定义{{1}}的实例替换,并使用它的生命周期并通过类中定义的方法间接处理它显式创建它的实例。然后,此实例需要作为参数传递给任何需要使用的函数或方法,或以其他方式对实例执行某些操作。