【问题标题】:How to write python lambda with multiple lines? [duplicate]如何用多行编写python lambda? [复制]
【发布时间】:2013-01-28 10:07:51
【问题描述】:

在 python 中,如何编写一个包含多行的 lambda 函数。我试过了

d = lambda x: if x:
                 return 1
              else 
                 return 2

但我遇到了错误...

【问题讨论】:

  • 如果你要给它一个名字,只需使用正确的def 语句。
  • 这是 python 中最糟糕的两件事之一:另一个是缺乏以任何理智/可读的方式链接集合处理的能力。解决方法 hack 是 `for comprehensions: 但这些只能读取两个级别

标签: python lambda


【解决方案1】:

请改用def

def d(x):
    if x:
        return 1
    else:
        return 2

所有 python 函数都是一阶对象(它们可以作为参数传递),lambda 只是一种方便的方法来制作短的。一般来说,如果函数定义超出一行简单代码,则最好使用普通函数定义。

即使那样,事实上,如果你将它分配给一个名字,我总是会使用def 而不是lambdalambda 仅在定义短的 key 函数时才是一个好主意,例如与 sorted() 一起使用,因为它们可以内嵌到函数调用中。

请注意,在您的情况下,三元运算符可以完成这项工作 (lambda x: 1 if x else 2),但我假设这是一个简化的情况。

(作为代码高尔夫笔记,这也可以用更少的代码来完成,如 lambda x: bool(x)+1 - 当然,这是非常不可读的,也是一个坏主意。)

【讨论】:

  • 对于不可读的高尔夫比赛,我更喜欢-~bool(x),但字符数相同:)
  • @JBernardo 这是我想的那样难以理解。向您致敬,先生。
  • def 不能与逻辑内联,但必须单独存在。它打破了阅读代码的流程。但这就是我们在 python 中处理的内容。
【解决方案2】:

lambda 在 Python 中的构造是 limited to an expression only,不允许使用任何语句

在保持上述约束的同时,您当然可以使用反斜杠字符编写多行表达式:

>>> fn = lambda x: 1 if x \
                     else 2
>>> fn(True)
>>> 1
>>> fn(False)
>>> 2

【讨论】:

    【解决方案3】:

    这是您尝试做的正确版本:

    d = lambda x: 1 if x else 2
    

    但我不确定你为什么要这样做。

    【讨论】:

    • 这并没有回答标题中提出的问题。
    猜你喜欢
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    • 2016-07-27
    相关资源
    最近更新 更多