如何生成函数"呼叫";接受任何函数作为python中的参数和论据?
例如,
def add(a, b):
return a + b
call(add, 2, 3) == 5
call(add, a = 4, b = 1) == 5
call(max, [3,2,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, 2, 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'
我哪里错了?
您需要在call
:中解压缩args
和kwargs
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,2,4,7])) # 7