是否可以将导入的代码作为主文件的一部分运行?

时间:2017-03-07 23:16:08

标签: python import module

问题很简单:我需要将一段代码移动到另一个文件中。在主文件中,我会执行import not_main之类的操作。是否可以将导入的代码作为主文件的一部分运行?这是一个简单的例子:

__code
    \__main.py
    |__not_main.py

main.py内容:

a = 5
import not_main

not_main.py内容:

print a

当我正在运行main.py时,出现错误:NameError: name 'a' is not defined。我怎样才能使它工作?感谢您的任何提示。

1 个答案:

答案 0 :(得分:1)

除非先导入该模块,否则无法直接引用另一个模块中定义的模块中的变量。无论它是主模块,如果您尝试在任何两个模块之间执行相同操作,则会发生此错误。导入的模块无法获得导入模块的范围。

有一些可能的解决方法,但如果您尝试分离的代码相当复杂,我会谨慎使用它们。但如果您打算这样做,我建议将两个模块中所需的任何变量分成仅包含这些变量的第三个模块。所以你给出的简单例子将变为:

cross_module_variables.py:

a = 5

main.py:

import not_main

not_main.py:

import cross_module_variables as cmv
print cmv.a

对于更复杂的代码,在执行某些代码以生成值之后,您可能需要在main中分配变量的值。在这种情况下,您需要将cross_module_variables导入主模块并为其分配值。变量必须先实例化才能在main中使用,这样你就可以在cross_module_variable中定义一个默认值的变量。所以看起来更像是这样:

cross_module_variables.py:

a = 0

main.py:

import cross_module_variables as cmv
cmv.a = 5
import not_main

not_main.py:

import cross_module_variables as cmv
print cmv.a

有关跨模块变量的详细信息,请参阅此answer

尽管如此,我强烈建议您考虑以其他合理的方式重构代码。听起来你在模块中直接运行所有代码,而不是围绕代码的离散部分定义函数。您应该研究设计连贯功能程序的方法。