Python 如何避免在主函数中指定子函数参数?

Python 如何避免在主函数中指定子函数参数?,python,function,arguments,Python,Function,Arguments,我使用Python编写脚本。我使用main函数调用其他函数(子函数)。所以每次我添加新的子函数时,我必须向主函数中添加新的参数如何避免这种情况? 例如,我有2个子功能和1个主功能: def Func1(arg1, arg2): DoStuff1 def Func2(arg3, arg4): DoStuff2 def MainFunc(arg1, arg2, arg3, arg4): return Func1(arg1, arg2) + Func2(arg3, arg4) def Ne

我使用Python编写脚本。我使用main函数调用其他函数(子函数)。所以每次我添加新的子函数时,我必须向主函数中添加新的参数如何避免这种情况?

例如,我有2个子功能和1个主功能:

def Func1(arg1, arg2): DoStuff1
def Func2(arg3, arg4): DoStuff2
def MainFunc(arg1, arg2, arg3, arg4):
    return Func1(arg1, arg2) +  Func2(arg3, arg4)
def NewFunc(arg5, arg6): DoStuff3
我写了一个新函数:

def Func1(arg1, arg2): DoStuff1
def Func2(arg3, arg4): DoStuff2
def MainFunc(arg1, arg2, arg3, arg4):
    return Func1(arg1, arg2) +  Func2(arg3, arg4)
def NewFunc(arg5, arg6): DoStuff3
然后我必须在
MainFunc
中指定
arg5、arg6

def Func1(arg1, arg2): DoStuff1
def Func2(arg3, arg4): DoStuff2
def NewFunc(arg5, arg6): DoStuff3
def MainFunc(arg1, arg2, arg3, arg4, arg5, arg5):
    return Func1(arg1, arg2) +  Func2(arg3, arg4) + NewFunc(arg5, arg6)

如何避免将所有这些子参数添加到主函数中?

您可以将多个参数组合到一个元组参数中,并像这样使用它

def Func1(arg1, arg2): DoStuff1
def Func2(arg3, arg4): DoStuff2
def MainFunc(*arg):
    return Func1(arg[0], arg[1]) +  Func2(arg[2], arg[3])

您可以将多个参数组合成一个元组参数,并像这样使用它

def Func1(arg1, arg2): DoStuff1
def Func2(arg3, arg4): DoStuff2
def MainFunc(*arg):
    return Func1(arg[0], arg[1]) +  Func2(arg[2], arg[3])
其他方式:

def func(arg1, arg2, **kwargs):
    pass

def func2(arg3, arg4, **kwargs):
    pass

def func3(arg5, arg6, **kwargs):
    pass

def main(**kwargs):
    return func(**kwargs) + func2(**kwargs) + func(**kwargs)
其他方式:

def func(arg1, arg2, **kwargs):
    pass

def func2(arg3, arg4, **kwargs):
    pass

def func3(arg5, arg6, **kwargs):
    pass

def main(**kwargs):
    return func(**kwargs) + func2(**kwargs) + func(**kwargs)

您可以使用参数解包,并定义接受任意数量位置参数的函数:

def func1(*args): # do stuff 1
def func2(*args): # do stuff 2
def new_func(*args): # do stuff 3
def main_func(*args):
    return func1(*args[:2]) +  func2(*args[2:4]) + new_func(*args[4:])

但是,它的可读性不会比你目前拥有的更高,也不会像你现在拥有的那样明确。这两个都很重要

您可以使用参数解包,并定义接受任意数量位置参数的函数:

def func1(*args): # do stuff 1
def func2(*args): # do stuff 2
def new_func(*args): # do stuff 3
def main_func(*args):
    return func1(*args[:2]) +  func2(*args[2:4]) + new_func(*args[4:])

但是,它的可读性不会比你目前拥有的更高,也不会像你现在拥有的那样明确。这两个都很重要

有没有一个特定的模式?由于这不仅影响函数中的参数数量,而且还影响调用者必须传递的参数数量,这难道不能概括为“如何正确传递大量数据”吗?(答案可能涉及定义一些数据结构/类。)对此有多种解决方案,正确答案取决于您的具体问题。请给我们看你的实际代码,这样我们就可以知道哪个解决方案是适用的。@deceze我不是真正的程序员(自学成才)。我使用子函数隐藏代码的复杂性。@rje我的任务是编写代码以自动下载数据。我的每个子函数都完成了部分工作(身份验证、查询、响应处理、下载等),然后考虑通过一个描述“请求”的DICT(或者您确切地表达了什么),而不是单独的值:<代码> MainFunc({ URL):“Fo’,…})<代码>。这有什么特定的模式吗?由于这不仅影响函数中的参数数量,而且还影响调用者必须传递的参数数量,这难道不能概括为“如何正确传递大量数据”吗?(答案可能涉及定义一些数据结构/类。)对此有多种解决方案,正确答案取决于您的具体问题。请给我们看你的实际代码,这样我们就可以知道哪个解决方案是适用的。@deceze我不是真正的程序员(自学成才)。我使用子函数隐藏代码的复杂性。@rje我的任务是编写代码以自动下载数据。我的每个子函数都完成了部分工作(身份验证、查询、响应处理、下载等),然后考虑通过一个描述“请求”的DICT(或者您确切地表达了什么),而不是单独的值:<代码> MainFunc({ URL):“Fo’,…})< /代码>。