【发布时间】:2019-09-03 15:24:49
【问题描述】:
我试图弄清楚一行代码的作用,但我很难理解它是如何工作的。我大致了解 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)]
【问题讨论】:
-
不是默认函数值吗?如果
x未通过,则使用button_num的值作为x?
标签: python-3.x function tkinter lambda functional-programming