如何在 Python 中接受任何函数作为参数和参数"call"制作函数?



如何生成函数"呼叫";接受任何函数作为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:中解压缩argskwargs

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

最新更新