【发布时间】:2021-07-24 10:09:43
【问题描述】:
如果我有一个函数字典,例如:
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]
每个都采用相似但数量略有不同的参数,我收集(来自例如[here][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)有多个 xs 和 ys 存储在一个列表中(这样我可以运行 [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]:Calling functions with parameters using a dictionary in Python
【问题讨论】:
-
我不确定我是否理解...您有一个
(x, y)对的列表(或者更确切地说,多个这样的列表)。partial的动机是“锁定”一个固定的y,还是只是想运行整个列表中的所有函数,而忽略y的不需要它的函数? -
您可以在“double” lambda 中添加一个未使用的参数,以便您的所有 lambda 接受两个参数?
"double": lambda x, _: x*2 -
@CrazyChucky 是的,我有多个
(x,y)对,我想知道是否有一种干净的方法可以为每对调用多个函数,而不必单独写出所有函数。将函数放入字典是一种方法,但我还想考虑可变数量的参数。这有意义吗? -
@IainShelvington 我可以,但我认为这可能会混淆某些函数(在现实生活中,函数没有意义的情况下接受参数
y)。只是想知道是否有比为每个x,y对分别调用每个函数更简洁的方法 -
向函数添加未使用的参数比在循环 IMO 中生成部分函数“更干净”
标签: python