如果我有一个函数字典,比如:
func_dict = {
"sum": lambda x, y: x + y,
"multiply": lambda x, y: x * y,
"double": lambda x: x*2
}
func_dict["sum"](1, 2)
# outputs 3
# cannot do
[func_dict[i](x, y) for i in list_of_funcs_to_run]
每一个都有相似但略有变化的自变量,我(从例如[这里][1](收集到,我可以使用functools.partial
将字典定义为:
y = 1 # or whatever
func_dict = {
"sum": partial(lambda x, y: x + y, y=y),
"multiply": partial(lambda x, y: x * y, y=y),
"double": lambda x: x*2
}
func_dict["sum"](1)
# outputs 3
# now can do
[func_dict[i](x) for i in list_of_funcs_to_run]
我现在遇到的情况是:1(列表中存储了多个x
和y
(这样我就可以运行[sum(i,j) for i,j in zip(x,y)]
(,但我不一定知道字典实例化时的值(例如,函数字典可能是类属性,我需要在制定x
和y
列表后在类方法中调用字典(。
有没有一种方法我仍然可以在这里使用partial
(或另一种方法(来保留变量参数的字典,并像[func_dict[i](x) for i in list_of_funcs_to_run]
一样一次性调用所有函数?每次创建新的x
和y
变量时,我只能考虑声明函数字典,例如
for i in list_of_funcs_to_run:
x = ...
y = ...
func_dict = ... # define func_dict with partials here
[func_dict[i](x) for i in list_of_funcs_to_run]
谢谢![1] :在Python 中使用字典调用带参数的函数
与其动态创建部分函数,不如让所有lambdas/函数接受相同数量的参数来修复第一个用例。
func_dict = {
"sum": lambda x, y: x + y,
"multiply": lambda x, y: x * y,
"double": lambda x, _: x*2
}
我们将未使用的第二个参数添加到";双";λ。使用_
作为参数名称是未使用/忽略的参数的惯例