如何在“if”中执行代码__主要的从另一个python文件

如何在“if”中执行代码__主要的从另一个python文件,python,namespaces,pytest,main,Python,Namespaces,Pytest,Main,在我的python文件中,我有一个接受一些参数的函数,在同一个文件中,我有一个if\uuuuuu name\uuuu==“\uuuuuu main\uuuuu”子句,该子句使用一组特定的参数运行此函数(供用户展示它的功能)。这样, def foo(arg1, arg2): pass if __name__ == "__main__": arg1 = 1 arg2 = 2 foo(arg1, arg2) 此外,我还有另一个文件,其中包含pytest使用的测试。我

在我的python文件中,我有一个接受一些参数的函数,在同一个文件中,我有一个
if\uuuuuu name\uuuu==“\uuuuuu main\uuuuu”
子句,该子句使用一组特定的参数运行此函数(供用户展示它的功能)。这样,

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)

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

好吧,我不是这方面的专家,但是如果您的
名称=“\uuuuuuuu 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()
然而,我不知道你为什么要这么做。通常,在整个项目中,您只有一个主要函数来启动项目并从中调用其他函数

最终,如果你有文件的话,这种方法就不能达到文件主要功能的目的

file1.py 并且
file2.py
位于同一目录中,您可以:

file2.py 您需要像以前一样重新定义
arg1
arg2
,但接下来只需导入所需的函数即可。这将为您提供函数,但没有
file1.py的全局变量,因为这些变量受
if\uuuuu name\uuuuu==“\uuuuuu main\uuuu”语句的保护

更新

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

file1.py file2.py
这并不是最糟糕的,因为您仍然将
arg1
arg2
作为局部变量包含,因此没有太大的名称空间问题,但现在您可以导入它们,因为它们在代码的
if name==main
部分中没有受到保护

该块的全部要点是针对无法从另一个文件访问的代码。正如我在问题中提到的,我希望避免复制参数赋值。这是没有办法的,因为如果name==main
,它们在
中受到保护。你必须把它们带出那个街区才能访问它们。
if name==main
块的全部目的是防止单独的文件/脚本访问该代码段,从而防止名称空间共谋。我会发布你可能想做的事情的更新。这就是我想要的。回应您的评论:也许我对主函数的理解是否定的,但我的代码的全部要点是在
foo
中实现一些数学功能,并且在
中调用什么,如果uuu name\uuuu==“uu main\uuu”
块只是为了展示功能。
def foo(arg1, arg2):
    pass

if __name__ == "__main__":
    arg1 = 1
    arg2 = 2
    foo(arg1, arg2)
from file1 import foo
arg1 = 1
arg2 = 2
foo(arg1, arg2)
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()