为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

蛊毒传说 2021-12-17 10:48:25
在我的 python 文件中,我有一个接受一些参数的函数,在同一个文件中我有一个if __name__ == "__main__"子句,它使用一组特定的参数运行这个函数(供用户展示它的作用)。像这样,def foo(arg1, arg2):    passif __name__ == "__main__":    arg1 = 1    arg2 = 2    foo(arg1, arg2)此外,我还有另一个包含 pytest 使用的测试文件。我想让其中一个测试完全按照上面提到的 if 子句中所写的内容运行,即执行arg1 = 1arg2 = 2foo(arg1, arg2)如果不将代码复制到包含测试的文件中,这可能吗?
查看完整描述

2 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

好吧,我不是这方面的专家,但是如何将您的重定向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 个主要功能来使事情顺利进行并从那里调用其他功能。


最终这种失败的文件的主要功能的目的


查看完整回答
反对 回复 2021-12-17
?
慕容3067478

TA贡献1773条经验 获得超3个赞

如果你有文件


文件1.py

def foo(arg1, arg2):

    pass


if __name__ == "__main__":

    arg1 = 1

    arg2 = 2

    foo(arg1, arg2)

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


文件2.py

from file1 import foo

arg1 = 1

arg2 = 2

foo(arg1, arg2)

您将需要重新定义arg1并arg2像您一样,但这只是导入您想要的功能的问题。这将为您提供函数,但没有任何全局变量,file1.py因为它们受if __name__ == "__main__"语句保护


更新


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


文件1.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()

文件2.py

from file1 import new_function

new_function()

这还不是最糟糕的,因为您仍然包含arg1和arg2作为局部变量,所以没有巨大的命名空间问题,但现在您可以导入它们,因为它们在if name == main您的代码部分中不受保护。


查看完整回答
反对 回复 2021-12-17
  • 2 回答
  • 0 关注
  • 377 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信