猿问

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

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


def foo(arg1, arg2):

    pass


if __name__ == "__main__":

    arg1 = 1

    arg2 = 2

    foo(arg1, arg2)

此外,我还有另一个包含 pytest 使用的测试文件。我想让其中一个测试完全按照上面提到的 if 子句中所写的内容运行,即执行


arg1 = 1

arg2 = 2

foo(arg1, arg2)

如果不将代码复制到包含测试的文件中,这可能吗?


蛊毒传说
浏览 378回答 2
2回答

慕侠2389804

好吧,我不是这方面的专家,但是如何将您的重定向if __name__ == "__main__": 到另一个函数并从您的另一个文件中调用该函数?文件 1:def main_file1:  arg1 = 1  arg2 = 2  foo(arg1, arg2)if __name__ == "__main__":  main_file1()文件2:from file1 import *def somefunc():  main_file1()但是,我不确定您为什么要这样做。通常,您的整个项目中只有 1 个主要功能来使事情顺利进行并从那里调用其他功能。最终这种失败的文件的主要功能的目的

慕容3067478

如果你有文件文件1.pydef foo(arg1, arg2):    passif __name__ == "__main__":    arg1 = 1    arg2 = 2    foo(arg1, arg2)并且file2.py在同一目录中,您可以:文件2.pyfrom file1 import fooarg1 = 1arg2 = 2foo(arg1, arg2)您将需要重新定义arg1并arg2像您一样,但这只是导入您想要的功能的问题。这将为您提供函数,但没有任何全局变量,file1.py因为它们受if __name__ == "__main__"语句保护更新如果您不想在内部重新分配,则file2.py可以执行以下操作:文件1.pydef foo(arg1, arg2):    passdef new_function(): #make a new function that you can import    arg1 = 1    arg2 = 2    foo(arg1, arg2)if __name__ == "__main__":    new_function()文件2.pyfrom file1 import new_functionnew_function()这还不是最糟糕的,因为您仍然包含arg1和arg2作为局部变量,所以没有巨大的命名空间问题,但现在您可以导入它们,因为它们在if name == main您的代码部分中不受保护。
随时随地看视频慕课网APP

相关分类

Python
我要回答