为什么在获取功能后需要使用此支架?

时间:2019-06-19 10:48:36

标签: python

我对理解此代码有疑问:

def dispatch_dict(operator, x, y):
    return {
        'add': lambda: x + y,
        'sub': lambda: x - y,
        'mul': lambda: x * y,
        'div': lambda: x / y,
    }.get(operator, lambda: None)() # here I don't understand this brackets  
                                    #  after closing get function

print(dispatch_dict('sub', 2, 4))

2 个答案:

答案 0 :(得分:1)

.get()函数返回lambda(从dict或只是空的lambda)。 Lambda is an anonymous function,因此.get()返回一个函数。需要使用这些括号来返回此函数的结果,而不是函数本身,因为使用它们,函数将调用并返回结果。

答案 1 :(得分:0)

您的.get(operator, lambda: None)返回函数对象-例如https://medium.com/python-pandemonium/function-as-objects-in-python-d5215e6d1b0d,然后添加()即可调用该函数。

这种简化可能会有所帮助:

def add_lambda(x, y):
    add = lambda: x + y  # Note this is not PEP-8 compliant
    return add

the_function = add_lambda(31, 11)  # returns lambda function
the_function()  # here are your brackets, this returns 42