在我的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)
是否可以不将代码复制到包含测试的文件中?
答案 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)
如果您有文件
def foo(arg1, arg2):
pass
if __name__ == "__main__":
arg1 = 1
arg2 = 2
foo(arg1, arg2)
和file2.py
在同一目录中,您可以:
from file1 import foo
arg1 = 1
arg2 = 2
foo(arg1, arg2)
您将需要像您一样重新定义arg1
和arg2
,但这只是导入所需功能的问题。这将为您提供功能,但不会file1.py
的全局变量,因为它们受if __name__ == "__main__"
语句保护
更新
如果您不想在file2.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()
from file1 import new_function
new_function()
这不是最坏的情况,因为您仍然包含arg1
和arg2
作为局部变量,因此不必担心名称空间,但是现在您可以导入它们,因为{代码的{1}}部分。