Python 是否可以编写一个接受两个函数的函数+;他们各自的论点是什么?
假设我有一个方法:Python 是否可以编写一个接受两个函数的函数+;他们各自的论点是什么?,python,Python,假设我有一个方法: def A(...) 这需要传递给它多个方法(B,C),每个方法都接受未知数量的参数。如果有帮助,可以知道可能的参数变量名 是否有其他方法可以传递这些参数(可能通过两个列表?检查以下内容: def func1(arg1, arg2): print("I am func1: arg1 is {} and arg2 is {}".format(arg1, arg2)) def func2(arg1, arg2, arg3): print("I am func
def A(...)
这需要传递给它多个方法(B,C),每个方法都接受未知数量的参数。如果有帮助,可以知道可能的参数变量名
是否有其他方法可以传递这些参数(可能通过两个列表?检查以下内容:
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)
是的,您可以按照您的建议进行操作,并将参数作为两个单独的列表传递:
def A(B, B_args, C, C_args):
B(*B_args) # Use function B
C(*C_args) # Use function C
这将完成任务,但有一点有点难看,那就是它会阻止使用带有B
和C
的关键字参数,这有时是为了清晰起见。为每个函数添加单独的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))
到目前为止您尝试了什么?
def(f1,dict1,f2,dict2):f1(**dict1);f2(**dict2)
目前,这更像是一个思维实验,因为我根本不知道如何实现这一点——我已经尝试让函数accept**kwargs并搜索键以找到合适的参数,考虑传入2个列表并通过*argsCheck out:传入这些命令,假设func2:def func2有两种可能(arg1、arg2、arg3):。。。def altfunc2(arg1,arg2):。。。。只要传递的参数数量与func2版本所采用的参数数量相匹配,就不会出现错误?@A.Savino:是。只要参数的数量匹配,就不会有错误。我不明白你所说的func2的两种可能性是什么意思。你能解释一下吗?