是否有可能编写一个接受两个函数+它们各自的参数作为参数的函数?

时间:2017-07-17 20:26:55

标签: python

说我有方法:

def A(...)

需要将多个方法(B,C)传递给它,每个方法都采用未知数量的参数。如果这有用,可以知道可能的参数变量名称。

我是否可以通过其他方式传递这些参数(可能通过2个列表?)

2 个答案:

答案 0 :(得分:0)

检查出来:

def func1(arg1, arg2):
    print("I am func1: arg1 is {} and arg2 is {}".format(arg1, arg2))


def func2(arg1, arg2, arg3):
    print("I am func2: arg1 is {} and arg2 is {} and arg3 is {}".format(arg1, arg2, arg3))


def majorfunc(f1, args1, f2, args2):
    print("I am majorfunc. I call all the funcs")
    print("Now, I am calling f1")
    f1(*args1)
    print("Now, I am calling f2")
    f2(*args2)


def main():
    f1 = func1
    args1 = (1, 2)

    f2 = func2
    args2 = ('a', 'b', 'c')

    majorfunc(f1, args1, f2, args2)

答案 1 :(得分:0)

是的,你可以按照你的建议做,并将参数作为两个单独的列表传递:

def A(B, B_args, C, C_args):
    B(*B_args) # Use function B
    C(*C_args) # Use function C

这将完成工作,但稍微有点丑陋的是,它会阻止使用BC的关键字参数,这有时是为了清晰明了。为每个函数添加单独的args和kwargs参数似乎也很笨拙。

对于更通用的方法,我建议将参数绑定到A主体的外部的函数,这将为您提供Python函数调用机制的全部功能。简单的方法:

import functools

def A(B, C):
    B() # Use function B
    C() # Use function C

# Call A while mix-and-matching positional and keyword args
A(functools.partial(B, 1, 2, 3), functools.partial(C, foo=bar))