首页 > 解决方案 > '=' 运算符在 lambda 表达式中使用时是什么意思?

问题描述

我试图弄清楚一行代码的作用,但我很难理解它是如何工作的。我大致了解 Python 中 lambda 表达式的用途、使用和限制,但是这行代码让我很困惑,我找不到任何其他答案来解决它。

我正在尝试为计算器创建多个按钮,当按下按钮时会出现相应的值。我不想制作 9 个单独的按钮,而是想使用列表理解来一次制作所有按钮(9 个按钮,计算器上的每个数字 1 个)。有关更多详细信息,请参见代码。

我真的不明白表达式x=button_num中在做什么,lambda x=button_num: enter_number(x)以及为什么它只有在完全以这种方式编写时才有效。如果我使用表达式lambda: enter_number(button_num)代替,计算器只显示值 9,无论我按下哪个按钮。


# Function inserts value into calculator based on clicked button
def enter_number(x):
    if entry_box.get() == "O":  # Used to emulate that a calculator has a "0" initially
        entry_box.delete(0, 'end')
        entry_box.insert(0, str(x))
    else:
        length = len(entry_box.get())
        entry_box.insert(length, str(x))

# Generate buttons
button_numbers = [Button(width=4, text=str(button_num), font='times 15 bold', bd=5,
                         command=lambda x=button_num: enter_number(x)) for button_num in range(10)]

标签: python-3.xfunctiontkinterlambdafunctional-programming

解决方案


lambda与 非常相似def,但没有名称。在这两种情况下,类似x=10定义x一个默认值为10.

例如,考虑这个简单的函数。

def foo(x=10):
    print("x: {}".format(x))

运行时,您将得到以下结果:

  • foo()打印“x:10”
  • foo(42)=> 打印“x: 42”

lambda类似于 def (不完全是,但对于本次讨论来说足够接近),除了该函数是匿名的 - 它没有名称。然后,您可以将此函数分配给变量,或将其传递给期望传递函数的对象,例如在定义回调时。

例如,这会创建一个匿名函数并将其与名为 的变量相关联foo。然后,您可以像调用任何其他函数一样调用它。

foo = lambda x=10: print("x: {}".format(x))
foo()    # prints "x: 10"
foo(42)  # prints "x: 42"

lambda当您并不真正关心函数名称是什么时,例如创建回调时,这是一种创建函数的便捷方式。通过使用默认参数,您将变量的当前值绑定为给定参数的默认值。


推荐阅读