说我有方法:
def A(...)
需要将多个方法(B,C)传递给它,每个方法都采用未知数量的参数。如果这有用,可以知道可能的参数变量名称。
我是否可以通过其他方式传递这些参数(可能通过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
这将完成工作,但稍微有点丑陋的是,它会阻止使用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))