在某些情况下,使用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])
虽然这样做起来相当丑陋/笨拙,但是有没有办法在不制作临时列表/元组的情况下格式化表达式?
答案 0 :(得分:2)
如果您总是想要返回最后一个值,并且您不想创建临时列表或元组,那么请使用and
和or
运算符,如下所示
some_func(callback=lambda: (foo() and False) or some_variable)
这将首先执行foo
,返回值将and
与False
一起执行。即使foo
返回真实的内容,and
也会False
确保结果为False
。
由于表达式的第一部分是False
,or
将评估并返回第二个操作数。因此,无论foo
的结果如何,您都将获得所需的值。