首页 > 解决方案 > 如何在python中让一个函数“调用”接受任何函数作为参数和她的参数?

问题描述

如何在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'

我哪里做错了?

标签: pythonargskeyword-argument

解决方案


您需要打开包装argskwargs在里面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,2,4,7])) # 7

推荐阅读