如何在Python的dictionary.get()方法中传递参数到函数(字典项)?



我想用字典替换多个if ... else语句。下面的代码成功运行并输出7(即第一个参数是'add',它调用my_dict字典中声明的add函数,并为其提供参数n1n2):

def my_calc(operation, n1, n2):
my_dict = {
'add': lambda n1, n2: n1 + n2,
'sub': lambda n1, n2: n1 - n2,
'mul': lambda n1, n2: n1 * n2,
'div': lambda n1, n2: n1 / n2
}
return my_dict[operation](n1, n2)
print(my_calc('add', 3, 4))

然而,如果我试图传递一个不熟悉的参数,例如my_calc('abc', 3, 4),它会引发一个KeyError,因为abc没有定义。因此,我使用dictionary.get()方法。

我如何在参数传递到由get()方法从字典返回的函数?函数应该返回对n1和n2进行操作的结果。我可以很容易地处理使用try ... except的错误,但我想使用dictionary.get()方法,并有函数返回一个默认值,如果操作不在字典中。

def my_calc(operation, n1, n2):
my_dict = {
'add': lambda n1, n2: n1 + n2,
'sub': lambda n1, n2: n1 - n2,
'mul': lambda n1, n2: n1 * n2,
'div': lambda n1, n2: n1 / n2
}

return my_dict.get(operation(n1, n2), "Default Value")
print(my_calc('abc', 3, 4))

输出:

Traceback (most recent call last):
File "<string>", line 12, in <module>
File "<string>", line 10, in my_calc
TypeError: 'str' object is not callable

是否有任何方法可以将参数传递给get()方法内的操作?

列表项

您的第一个问题是您正在调用操作,这是一个字符串。您希望调用get()方法的结果。这意味着参数在get()括号之外(之后)。

然后,提供默认行为,get()也应该是一个函数的默认值。它不需要对它的参数做任何事情。您可以像使用其他函数一样使用lambda。

return my_dict.get(operation, lambda n1, n2: "Default Value")(n1, n2)

如果需要,可以将默认函数存储在字典中。这样他们就都在一起了。我们将使用None作为键,因为1)有意义(没有操作),2)永远不能由用户输入。

my_dict = {
None:  lambda n2, n2: "Default value",
'add': lambda n1, n2: n1 + n2,
'sub': lambda n1, n2: n1 - n2,
'mul': lambda n1, n2: n1 * n2,
'div': lambda n1, n2: n1 / n2
}

然后……

return my_dict.get(operation, my_dict[None])(n1, n2)

最新更新