问题描述
如何使函数“调用”接受任何函数作为参数,并在python中为她提供参数?
例如,
def add(a,b):
return a + b
call(add,2,3) == 5
call(add,a = 4,b = 1) == 5
call(max,[3,4,7]) == 7
我尝试过:
def call(fun,*args,**kwargs):
if args and kwargs:
return fun(args,kwargs)
elif kwargs:
return fun(kwargs)
elif args:
return fun(args)
else:
return None
这就是我得到的:
Failed. Runtime error
Error:
Traceback (most recent call last):
File "jailed_code",line 22,in <module>
got = call(my_sum,1,7)
File "jailed_code",line 9,in call
return fun(args)
File "jailed_code",line 19,in my_sum
return sum(args)
TypeError: unsupported operand type(s) for +: 'int' and 'tuple'
我哪里出错了?
解决方法
您需要在args
内打开kwargs
和call
的包装:
def add(a,b):
return a+b
def call(fun,*args,**kwargs):
if args and kwargs:
return fun(*args,**kwargs)
elif kwargs:
return fun(**kwargs)
elif args:
return fun(*args)
else:
return None
print(call(add,2,3)) # 5
print(call(add,a = 4,b = 1)) # 5
print(call(max,[3,4,7])) # 7