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

Python 是否可以将导入的代码作为主文件的一部分运行?,python,import,module,Python,Import,Module,问题很简单:我需要将一段代码移动到另一个文件中。在主文件中,我将执行类似于import not\u main的操作。是否可以将导入的代码作为主文件的一部分运行?下面是一个简化的示例: __code \__main.py |__not_main.py main.py内容: a = 5 import not_main print a not_main.py内容: a = 5 import not_main print a 当我运行main.py时,出现一个错误:name错误

问题很简单:我需要将一段代码移动到另一个文件中。在主文件中,我将执行类似于
import not\u main
的操作。是否可以将导入的代码作为主文件的一部分运行?下面是一个简化的示例:

__code
    \__main.py
    |__not_main.py
main.py
内容:

a = 5
import not_main
print a
not_main.py
内容:

a = 5
import not_main
print a

当我运行
main.py
时,出现一个错误:
name错误:未定义名称“a”
。我怎样才能让它工作?感谢您提供的提示。

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

有可能的解决方法,不过如果您试图分离的代码相当复杂,我会提醒您使用它们。但是,如果您打算这样做,我建议您将两个模块中所需的任何变量分离到只包含这些变量的第三个模块中。因此,您给出的简单示例将变成:

交叉模块变量.py:

a = 5
a = 0
main.py:

import not_main
import cross_module_variables as cmv
cmv.a = 5
import not_main
非_main.py:

import cross_module_variables as cmv
print cmv.a
import cross_module_variables as cmv
print cmv.a
对于更复杂的代码,您可能需要在执行某些代码以生成值之后在main中分配变量的值。在这种情况下,您需要将交叉模块变量导入主模块并为其赋值。当然,必须先实例化该变量,然后才能在main中使用它,因此您必须在cross_module_variable中使用一些默认值来定义该变量。所以它看起来更像这样:

交叉模块变量.py:

a = 5
a = 0
main.py:

import not_main
import cross_module_variables as cmv
cmv.a = 5
import not_main
非_main.py:

import cross_module_variables as cmv
print cmv.a
import cross_module_variables as cmv
print cmv.a
有关跨模块变量的更多信息,请参见此


综上所述,我强烈建议您以其他明智的方式重新构建代码。这听起来像是在模块中直接运行所有代码,而不是围绕代码的离散部分定义函数。您应该研究设计连贯的函数程序的方法。

当您将代码拆分为多个文件时,您应该沿着干净的函数边界执行拆分,并通过函数参数和返回值在不同文件中的代码之间进行通信,不仅仅是将一个文件中的代码部分剪切粘贴到另一个文件中,并将
import
视为“立即运行另一个文件的内容”。