【问题标题】:Lambdas in ternary operator unexpected behavior三元运算符中的 Lambda 意外行为
【发布时间】:2020-02-08 00:27:48
【问题描述】:
>>> (lambda: 1 if True else lambda: 2)()
1
>>> (lambda: 1 if False else lambda: 2)()
<function <lambda>.<locals>.<lambda> at 0x7f5772e8eef0>
>>> (lambda: 1 if False else lambda: 2)()()
2

为什么需要调用后者两次?

谢谢。

【问题讨论】:

    标签: python lambda ternary-operator


    【解决方案1】:

    lambda: 1 if condition else lambda: 2 这样写它会得到这样的解释:

    lambda: (1 if condition else lambda: 2)
    

    您需要这样编写它才能使其按预期工作:

    (lambda: 1) if condition else lambda: 2
    

    【讨论】:

      【解决方案2】:
      lambda: 1 if False else lambda: 2
      

      让我把它写成一个带有 if 语句的普通函数:

      def func():
          if False:
              return 1
          else:
              return (lambda: 2)
      

      现在如果我这样做:

      x = func()
      

      x 将是 lambda: 2 - 这是另一个函数。

      那么我如何到达2

      x()
      

      这给出:

      2
      

      现在,如果我将变量 x 内联:

      res = func()()
      

      现在res 将是2

      我希望这很清楚。这就是为什么需要两个()

      你可能想要这样的东西:

      (lambda: 1) if False else (lambda: 2)
      

      这只是一个普通的 if 语句返回函数。

      【讨论】:

        猜你喜欢
        • 2017-03-05
        • 1970-01-01
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        • 2011-12-31
        • 1970-01-01
        • 2014-01-18
        • 2022-01-11
        相关资源
        最近更新 更多