【问题标题】:Why can't I use "return" in lambda function in python?为什么我不能在 python 的 lambda 函数中使用“return”?
【发布时间】:2016-05-04 09:56:44
【问题描述】:

这不起作用:

print((lambda :  return None)())

但这确实:

print((lambda :  None)())

为什么?

【问题讨论】:

  • 您为什么要这样做?您有我们可以提供帮助的具体示例吗?
  • 我试图给出一个最简单的 lambda 函数的教育示例 - 空 lambda

标签: python lambda


【解决方案1】:

因为return 是一个声明。 Lambdas can only contain expressions.

【讨论】:

  • 很棒,也深入了解了 lambdas 的本质——它们只能包含表达式
【解决方案2】:

lambda 函数自动返回一个表达式。它们不能包含语句。 return None 是一个语句,因此无法工作。 None 是一个表达式,因此有效。

【讨论】:

    【解决方案3】:

    Lambda只能执行expressions并返回执行语句的结果,返回的是statement

    考虑使用orand 运算符将结果短路,以便在您的lambda 返回的值方面更加灵活。请参阅下面的一些示例:

    # return result of function f if bool(f(x)) == True otherwise return g(x)
    lambda x: f(x) or g(x) 
    
    # return result of function g if bool(f(x)) == True otherwise return f(x).
    lambda x: f(x) and g(x) 
    

    【讨论】:

      【解决方案4】:

      因为 lambda 接受多个参数和组合这些参数的表达式,并创建一个返回表达式值的小函数。

      见:https://docs.python.org/2/howto/functional.html?highlight=lambda#small-functions-and-the-lambda-expression

      【讨论】:

        【解决方案5】:

        记住lambda 可以调用另一个函数,而该函数又可以调用return 任何东西(甚至是另一个lambda

        # Does what you are asking... but not very useful
        return_none_lambda = lambda : return_none()
        def return_none():
            return None
        
        # A more useful example that can return other lambdas to create multipier   functions
        multiply_by = lambda x : create_multiplier_lambda(x)
        def create_multiplier_lambda(x):
            return lambda y : x * y
        
        a = multiply_by(4)
        b = multiply_by(29)
        
        print(a(2)) # prints 8
        print(b(2)) # prints 58
        

        【讨论】:

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