首页 > 解决方案 > 在带有参数的列表中插入函数并使用它们

问题描述

我有一个这样的参数: 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

谢谢你。

标签: pythonpython-3.xfunction

解决方案


这应该有效:

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”]是字符串,而不是实际函数,则需要添加evalto call

def call(params):
    p = params.copy()
    return map(lambda i: eval(i)(*p.values()), p.pop("funcList"))

推荐阅读