【问题标题】:Python Lambda with an alternative return value (best practice?)具有替代返回值的 Python Lambda(最佳实践?)
【发布时间】:2015-01-11 05:06:22
【问题描述】:

在某些情况下,使用 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])

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

【问题讨论】:

    标签: python-3.x lambda


    【解决方案1】:

    如果您总是想返回最后一个值,并且不想创建临时列表或元组,则使用 andor 运算符,像这样

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

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

    由于表达式的第一部分是Falseor 将计算并返回第二个操作数。所以,不管foo的结果如何,你都会得到你想要的值。

    【讨论】:

    • 只有当你想返回一个常量值False,如果你想返回一个元组或 True... 或者当你不知道它的真值状态时,这才有效 - 它不会工作.
    • 虽然代码有效,但就个人而言,我认为它看起来比简单地使用元组更混乱。或者,干脆不使用 lambda 并定义您自己的函数。它可能看起来也会更整洁。
    猜你喜欢
    • 2015-09-01
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-23
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    相关资源
    最近更新 更多