【问题标题】:converting if statement to lambda将 if 语句转换为 lambda
【发布时间】:2014-10-08 07:37:33
【问题描述】:

我有这样的 if 语句:

if brand_text == 'eth1' and group_name == 'size':
    group_name = 'feature'

我需要将其转换为 lambda,所以我尝试了:

xx = lambda one, two: 'feature' if one == 'eth1' and two == 'size' else pass
xx(brand_text, group_name)

但上面写着pass

SyntaxError: invalid syntax

【问题讨论】:

  • 你为什么还要这样做?
  • @jonrsharpe:不能取消分配,否则他将无法调用xx(brand_text, group_name)
  • @TimPietzcker 啊,谢谢;没有发现 group_name 在评估中分配
  • 为什么需要转换为 lambda?代码混淆竞赛?

标签: python if-statement lambda


【解决方案1】:

你不能在lambda中赋值给group_name,所以你必须使用返回值:

group_name = xx(brand_text, group_name)

在否定的情况下,您可能想保留原始的group_name,因此适当的表达式是:

xx = lambda bt, gn: 'feature' if bt == 'eth1' and gn == 'size' else gn

【讨论】:

    【解决方案2】:

    lambda 创建一个匿名函数,该函数在所有情况下都返回一个值,而if 语句仅在特定条件下为group_name 赋值。如果您真的想使用 lambda,则必须返回 None。此外,pass 是一个语句,不能内联使用,即 in-statement。这应该有效:

    xx = lambda one, two: 'feature' if one == 'eth1' and two == 'size' else None xx(brand_text, group_name)

    【讨论】:

      【解决方案3】:

      lambda 语句和def 语句之间唯一(或至少最显着)的区别是lambda 的主体必须是单个表达式,其值被隐式返回。 pass 是一个语句,不能嵌入到条件表达式的else 部分中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-04-09
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多