【问题标题】:undefined variable in lambda expressionlambda 表达式中的未定义变量
【发布时间】:2019-04-09 21:15:46
【问题描述】:

我无法理解以下功能。

def make_adder(n):
    return lambda x: x + n

plus_2 = make_adder(2)

plus_2(5)
>>> 7

在这个函数中,x 代表什么,以及如何不因为 x 未定义而导致错误?

【问题讨论】:

  • 它是函数的参数。就像你做了def foo(x): <do something with x>

标签: python python-3.x function lambda


【解决方案1】:

x表示lambda表达式接收的参数,这就是为什么它在“:”之前。

当您调用plus_2 = make_adder(2) 时,lambda 表达式将n 替换为函数(2) 的参数,所以现在plus_2 等于lambda x: x + 2。当您调用plus_2(5) 时,会计算 lambda 表达式,将 x 替换为函数参数 (5),因此结果为 5 + 2 = 7;

【讨论】:

    【解决方案2】:

    您正在定义一个函数,给定n,返回一个函数,该函数接受参数x 并返回x + n。这称为高阶函数。它不会产生错误,因为您显式返回另一个需要参数的函数。

    【讨论】:

    • 所以函数 make_adder 返回的不是 N 的加法,而是一个接受 X 的函数,调用返回 x + n。对吗?
    • 完全正确。这是一种使您的函数更通用的方法——您现在只需更改参数即可创建add_oneadd_twoadd_seventeen
    【解决方案3】:

    Lambda 函数很棒。它们允许您内联定义高阶函数。一般格式为lambda args: expression。在这种情况下,x 是传递给 lambda 函数的参数。因为make_adder 返回一个 lambda 函数,所以你传入make_adder 的任何内容都设置为n。因此,当您传入 make_adder(2) 时,您会得到一个 lambda 函数,该函数将 2 添加到参数 (x)。

    分解你原来的sn-p:

    def make_adder(n):
        return lambda x: x + n
    
    plus_2 = make_adder(2)  # returns lambda x: x + 2
    
    plus_2(5)  # executes lambda expression, x + 2 with x=5
    

    从零开始:

    5 + 2  # 7
    
    plus_two_fn = lambda x: x + 2  # Add 2 when you call plus_two_fn(x)
    
    plus_two_fn(3)  # returns 5 (3 + 2)
    
    
    def plus_num_fn(num):
        return lambda x: x + n  # Allow you to define plus "any" number
    
    
    plus_one_fn = plus_num_fn(1)  # lambda x: x + 1
    
    plus_one_fn(2)  # returns 3 (2 + 1)
    

    【讨论】:

      【解决方案4】:

      在下面一行:

      plus_2 = make_adder(2)
      

      我们将整数对象2 绑定到n

      之后使用参数调用plus_2

      plus_2(5)
      

      当执行lambda 表达式时,整数对象5 将绑定到x

      这是运行时执行流程。由于整个过程没有歧义或错误,程序运行良好,输出7

      现在,回答您的问题:变量 x 代表根据您的命名传递给 plus_2() 的任何值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-05-23
        • 2014-02-20
        • 2017-04-21
        • 1970-01-01
        • 1970-01-01
        • 2015-11-23
        • 1970-01-01
        相关资源
        最近更新 更多