python - 如何在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'
我哪里做错了?
解决方案
您需要打开包装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,2,4,7])) # 7
推荐阅读
- javascript - 计算 JavaScript 对象中 2 项之间的差异
- javascript - 给定 start 函数,编写一个函数来打印学生的字母成绩和班级平均成绩
- c++ - 错误:在“{”标记之前不允许函数定义
- java - 如何使用 Spring + Thymeleaf + JPA 强制数据作为表单提交的一部分
- r - 使用 CLMM2 进行灵敏度功率分析
- r - R For循环将数据帧迭代附加到空矩阵
- python - 使用 pandas 和 seaborn 制作年龄金字塔图
- sql - 日期解析不正确
- html - 移动版查看时网页右下角的间距
- go - 在 localhost 上使用 Golang TCP 连接进行“无限”高数据传输