模块中的公共变量

时间:2013-04-02 13:05:17

标签: python

我有三个python文件,我们称之为master.pyslave1.pyslave2.py。现在slave1.pyslave2.py没有任何功能,但需要使用相同的输入执行两个不同的操作(比如变量inp)。

我想做的是从master调用两个slave程序,并在master中指定一个输入变量inp,所以我不必两次。另外,我可以在一个主程序等中更改两个从站的输出。

我想将slave1.pyslave2.py的代码分开,以便我可以根据需要单独调试它们,但是当我尝试时

#! /usr/bin/python
# This is master.py
import slave1
import slave2

inp = #some input

slave1slave2运行之前我可以更改输入。据我了解,python导入模块的方式是首先执行它们。但有没有办法延迟执行它们,所以我可以指定公共输入?或者从一个地方指定两个文件的输入的任何其他方式?

编辑: slave1slave2执行两种不同的模拟,给出特定的初始条件。由于两者的输出是相同的,我想以类似的方式显示它们,以及控制将模拟数据写入哪些文件。所以我认为将它们导入主文件是最简单的方法。

3 个答案:

答案 0 :(得分:1)

您可以随时进行导入:

inp = #some input

import slave1
import slave2

请注意,这通常被认为是糟糕的设计 - 您最好不要让模块包含一个函数,而不是在导入模块时让它发生。

答案 1 :(得分:1)

将从属模块中的代码作为函数编写,导入函数,然后使用您需要的任何输入从master调用函数。如果您需要更多有状态信息,请考虑构建一个对象。

答案 2 :(得分:1)

看起来您的程序架构并不是最佳选择。我认为您有两个文件在使用python slave1.py运行时会立即执行。这对于编写脚本很有用,但是当你导入它们时,你会遇到麻烦。

最好将代码包装在函数的slave文件中(如@ sr2222所建议),并从master.py明确调用它们:

slave1.py/vertin2.py

def run(inp):
    #your code

master.py

import slave1, slave2

inp = "foo"
slave1.run(inp)
slave2.run(inp)

如果你仍然希望能够独立运行奴隶,你可以在最后添加这样的东西:

if __name__ == "__main__":
    inp = "foo"
    run(inp)