python - 在带有参数的列表中插入函数并使用它们
问题描述
我有一个这样的参数:
params={
'arg1':'a',
'arg2:'b',
'funcList':['x','y','z']}
如何正确地将它们插入到函数中,以便可以像这样调用它:
func(x(a,b),y(a,b),z(a,b))
也许我必须先映射并解压缩它们,但是如何以 pythonic 方式进行呢?
编辑二:
以下是更多案例的图片:
def X(a,b): # could be more args
print(a+b)
def Y(a,b): # could be more args
print(a*b)
# etc more funcs with identical args
定义调用函数可以是这样的:
def func(X,Y): # or maybe with *args?
print("args delivered")
并调用func
可能是这样的:
func(X(1,2),Y(1,2)) # X's and Y's arguments are always identical
这一切都源于一个数据,
params={
'a' :1,
'b' :2,
'funcList':['x','y']}
结果:
2
2
args delivered
谢谢你。
解决方案
这应该有效:
def call(params):
p = params.copy()
return map(lambda i: i(*p.values()), p.pop("funcList"))
示例用法:
>>> x = lambda arg1, arg2, arg3: arg1 + arg2 + arg3
>>> params={'arg1':'a', 'arg2':'b', 'arg3': 'c', 'funcList':[x]}
>>> list(call(params))
['abc’]
然后你可以这样调用你的函数:
>>> f = lambda i: print(i)
>>> f(*call(params))
abc
如果其中的值params[“funcList”]
是字符串,而不是实际函数,则需要添加eval
to call
:
def call(params):
p = params.copy()
return map(lambda i: eval(i)(*p.values()), p.pop("funcList"))
推荐阅读
- php - 在PHP中解码json多维数组
- android - 从 firebase 实时数据库中检索图像并使用 picasso 在图像滑块中显示
- python - 为什么 python 列表可以比 numpy 数组保存更多的数据?
- angular - 获取当前用户登录 Angular - Firebase
- docker - 容器开始使用 Dockerfile 时如何触摸文件
- javascript - 如何在 Material Design React 中使用数据属性?
- javascript - react-select:有没有办法删除右侧展开列表的按钮,至少在异步模式下?
- java - 更新 JavaFX ImageView 的图像?
- netlogo - 靠近海龟
- android - 进度对话框未显示 android 8.0 版中的微调器,但它仍然有效