python-3.x - '=' 运算符在 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)]
解决方案
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
当您并不真正关心函数名称是什么时,例如创建回调时,这是一种创建函数的便捷方式。通过使用默认参数,您将变量的当前值绑定为给定参数的默认值。
推荐阅读
- rust - Rust 中的安全行读取
- javascript - 如何从输入提交字段中删除 disabled = "disabled" 属性?
- c# - 图深度优先搜索
- python - 如何打印带有字符串和整数的列表理解并仅向字符串添加符号?
- java - Jooq INSERT...ON CONFLICT DO UPDATE...RETURNING 不返回值或捕获数据库异常
- php - 我的服务器正在响应 OpenSSL: : SSL: : SSLError: Receivedfatalalert: handshake_failure
- excel - 如何检查单元格是否为 TRUE,如果是,则从列中一一(按顺序)分配值?
- android - Kotlin 命名构造函数
- angular - Stripe Checkout 我创建了 post/v1/token 但没有 post/v1/paymentintent
- python - 大型列表初始化失败