Python Lambda具有替代返回值(最佳实践?)

时间:2015-01-11 05:06:23

标签: python-3.x lambda

在某些情况下,使用Python lambda来内联定义回调很方便。

some_func(callback=lambda: foo())

但是,如果回调期望返回值与函数无关,则会变得有点尴尬。

让我们说我们希望函数返回一个常量。

some_func(callback=lambda: (foo(), False)[1])

......另一种解决方法:

def tail(*args):
    return args[-1]

some_func(callback=lambda: tail(foo(), False))

注意,False仅用作示例,它也可以是命名空间中的变量。

some_func(callback=lambda: (foo(), some_variable)[1])

虽然这样做起来相当丑陋/笨拙,但是有没有办法在不制作临时列表/元组的情况下格式化表达式?

1 个答案:

答案 0 :(得分:2)

如果您总是想要返回最后一个值,并且您不想创建临时列表或元组,那么请使用andor运算符,如下所示

some_func(callback=lambda: (foo() and False) or some_variable)

这将首先执行foo,返回值将andFalse一起执行。即使foo返回真实的内容,and也会False确保结果为False

由于表达式的第一部分是Falseor将评估并返回第二个操作数。因此,无论foo的结果如何,您都将获得所需的值。