如何从另一个python文件中的`if __name__ ==“ __main __”`中执行代码

时间:2019-03-26 23:17:17

标签: python namespaces pytest main

在我的python文件中,我有一个带有一些参数的函数,在同一个文件中,我有一个if __name__ == "__main__"子句,该子句使用一组特定的参数运行此函数(供用户展示其功能)。像这样

def foo(arg1, arg2):
    pass

if __name__ == "__main__":
    arg1 = 1
    arg2 = 2
    foo(arg1, arg2)

此外,我还有另一个带有pytest使用的测试文件。我想让其中一项测试完全运行上述if子句中编写的内容,即execute

arg1 = 1
arg2 = 2
foo(arg1, arg2)

是否可以不将代码复制到包含测试的文件中?

2 个答案:

答案 0 :(得分:0)

好吧,我不是专家,但是如何重新修正您的date 到另一个函数并从另一个文件中调用该函数?

文件1:

if __name__ == "__main__":

文件2:

def main_file1:
  arg1 = 1
  arg2 = 2
  foo(arg1, arg2)

if __name__ == "__main__":
  main_file1()

但是,我不确定您为什么仍要这样做。通常,您在整个项目中只有1个主要功能来使事情滚动,并从那里调用其他功能。

最终这种失败无法达到文件主要功能的目的

答案 1 :(得分:0)

如果您有文件

file1.py

def foo(arg1, arg2):
    pass

if __name__ == "__main__":
    arg1 = 1
    arg2 = 2
    foo(arg1, arg2)

file2.py在同一目录中,您可以:

file2.py

from file1 import foo
arg1 = 1
arg2 = 2
foo(arg1, arg2)

您将需要像您一样重新定义arg1arg2,但这只是导入所需功能的问题。这将为您提供功能,但不会file1.py的全局变量,因为它们受if __name__ == "__main__"语句保护

更新

如果您不想在file2.py内重新分配,可以执行以下操作:

file1.py

def foo(arg1, arg2):
    pass

def new_function(): #make a new function that you can import
    arg1 = 1
    arg2 = 2
    foo(arg1, arg2)

if __name__ == "__main__":
    new_function()

file2.py

from file1 import new_function
new_function()

这不是最坏的情况,因为您仍然包含arg1arg2作为局部变量,因此不必担心名称空间,但是现在您可以导入它们,因为{代码的{1}}部分。