【问题标题】:Control Structures and Functions inside lambdalambda 内部的控制结构和函数
【发布时间】:2019-05-19 03:19:34
【问题描述】:

创建一个 lambda 函数greater,它接受两个参数 x 和 y,如果 x>y 则返回 x,否则返回 y。输入值为 (9,3)

greater= lambda a,b:a>b
if a>b:
    print(a)
else:
    return b
print(greater(a,b))

文件“/code/source.py3”,第 11 行
返回 b ^ SyntaxError: 'return' 外部函数

即使我在返回语句中也遇到错误。 我只需要将输出作为值来获取,但我使用 True 来获取值。

【问题讨论】:

  • 控制结构在 lambda 中是不允许的,但是有一个 expression variant of if(条件表达式)在这里可能有用。

标签: python


【解决方案1】:

lambda 中使用if - else

greater = lambda a, b: a if a > b else b

并将其称为:

greater(9, 13)

问题与您的代码有关:

  • 您的lambda 函数只是比较两个变量并返回True / False
  • 您在不允许的函数之外使用了return。 (顺便说一句,当您可以在内部执行时,不需要在外部 lambda 之外显式使用 if - else)。

【讨论】:

    【解决方案2】:

    您不会从 lambda 函数返回。

    greater = lambda a,b: a if a > b else b
    print(greater(3,4))
    

    【讨论】:

      【解决方案3】:

      您可以在 lambda 中使用三元运算符 (a if a > b else c),但控制结构需要 def 关键字

      另外,lambda 函数中没有return

      【讨论】:

        【解决方案4】:

        如果在您的 lambda 中,请使用 ternary

        greater = lambda x,y: x if x>y else y
        greater(1,3)  # 3
        greater(4,3)  # 4
        

        可以使用 lambda 关键字创建小型匿名函数。 Lambda 函数可用于需要函数对象的任何地方。它们在语法上仅限于单个表达式。

        Read more.

        【讨论】:

          【解决方案5】:

          不使用三元表达式的解决方案:

          greater = lambda a, b: (a, b)[a<b]
          

          a&lt;b 如果a 大于或等于b,则返回布尔值False,如果a 小于b,则返回True。我们使用布尔值(基本上表示01)作为tuple(a, b) 的索引来返回我们想要的结果。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-10-22
            • 2013-10-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-09-05
            相关资源
            最近更新 更多