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

时间:2017-10-24 11:00:54

标签: python function arguments

我使用Python编写脚本。我使用main函数调用其他函数(子函数)。所以每次添加新的子函数时我都要在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

然后我必须将arg5, arg6指定为MainFunc

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)

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

def func(arg1, arg2):
    pass

def func2(arg3, arg4):
    pass

def func3(arg5, arg6):
    pass

def main(*args):
    return func(*args[:2]) + func2(*args[2:4]) + func(*args[4:6])

其他方式:

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)

答案 2 :(得分:2)

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

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:])

但是,它不会更加可读,并且它不会像目前为止那样显式。这些都算得上了!