我得到了一个字典,其键等于函数参数,并且它们的对应值是函数的参数。是否有一种优雅的方法将字典中的值传递给其各自的参数?
如下所示的代码是功能性的,但是并不是很好用,特别是如果功能具有许多参数,并且根据情况的不同,则不需要全部。这样,代码变得非常重复且冗长。
目前最优雅的方法似乎是将重复的,冗长的函数包装在其自己的函数中,而我的函数f
后面仅包含美观,易读,能自我解释的代码。
def f(func, d):
if func == "g1":
# g1(a= d['a'], b=d['b') # functional, but doesn't look nice
pass
elif func == "g2":
# g2(a2= d['a2'], b2=d['b2'], c2= d['c2']) # functional, but doesn't look nice
pass
elif func == "g3":
wrapper_for_g3(d)
def g3():
pass
def g1(a, b):
pass
def g2(a2, b2, c2):
pass
def wrapper_for_g3(d): #100 parameters, same problem as above
g3(a1 = d['a1'],
# ...
# ...
a100=d['a100'],
)
d1 = dict()
d1["a"] = 1
d1["b"] = 2
d2 = dict()
d2["a2"] = 2
d2["b2"] = 4
d2["c2"] = 8
f("g1")
f("g2")
您可以在Python中使用双星号
def f(func, d):
func(**d)