【问题标题】:Transforming lambda expression to simple function将 lambda 表达式转换为简单函数
【发布时间】:2019-09-12 03:42:44
【问题描述】:

我很好奇在以下情况下是否可以避免 lambda 表达式。

例如使用 lambda 表达式,我可以简单地定义一个返回 lambda exp 的函数。

def square_fun(a,b,c):
   return lambda x: a*x**2 + b*x + c

之后我们可以使用:

f = square_fun(1,2,3)

f(1) # here x = 1

如何避免 lambda 表达式获得相同的行为?

例如,square_fun 必须返回另一个函数

def square_fun(a,b,c):
   return f...

【问题讨论】:

    标签: python python-3.x lambda


    【解决方案1】:

    你也可以使用functools.partial:

    from functools import partial
    
    
    def square_fun(x, a, b, c):
        return a * x ** 2 + b * x + c
    
    
    f = partial(square_fun, a=1, b=2, c=3)
    print(f(1))
    # should print 6
    

    【讨论】:

      【解决方案2】:

      在python中你可以在另一个函数中定义一个函数,所以下面的sn-p应该给你同样的行为:

      def square_fun(a, b, c):
          def result(x):
              return a*x**2 + b*x + c
          return result
      
      f = square_fun(1, 2, 3)
      print(f(1))
      # Should print 6
      

      所以,我将尝试解释这里发生了什么:

      1. 在f = square_fun(1, 2, 3) 行中,f 实际上会映射到内部函数(又名result)
      2. 请注意return result末尾没有(),因此该函数尚未调用
      3. 函数在print(f(1)) 中调用,变量x 将1 作为其值
      4. 最后,结果函数使用x、a、b 和c(来自square_fun(1, 2, 3))返回计算值

      您可以在此处找到更多信息 => https://www.learnpython.org/en/Closures

      【讨论】:

      • 确实,简单的解决方案!谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-15
      • 1970-01-01
      • 2015-03-31
      • 2017-09-25
      • 1970-01-01
      相关资源
      最近更新 更多