【发布时间】:2021-04-14 10:01:35
【问题描述】:
我使用 Tkinter 在 Python 中编写了一个简单的计算器代码。几乎每个函数都有效,但我似乎无法弄清楚 lambda 函数在我的项目中做了什么。如果我添加它没有任何错误,但如果我删除它会显示错误。
这里是错误指出的块
class Calc:
def __init__(self):
self.total = 0
self.current = ''
self.ip_val = True
self.check_sum = False
self.op = ''
self.result = False
def operation(self, op):
self.current = float(self.current) #this line generates error
if self.check_sum:
self.valid_function()
elif not self.result:
self.total = self.current
self.ip_val = True
self.check_sum = True
self.op = op
self.result = False
这是调用CALC类的操作方法的那行代码。
Button(calc, text='x^y', width=6, height=2, font=('arial', 20, 'bold'), bd=4, bg="gray20",
command= res.operation('pow')).grid(row=1, column=5, pady=1)
错误信息
Traceback (most recent call last):
File "T:/WorkSpace/PythonCourse/Day-6.py", line 235, in <module>
command= res.operation('pow')).grid(row=1, column=5, pady=1)
File "T:/WorkSpace/PythonCourse/Day-6.py", line 69, in operation
self.current = float(self.current)
ValueError: could not convert string to float: ''
仅供参考,我知道如果我像下面这样初始化 Button 类(使用 lambda 函数)
Button(calc, text='x^y', width=6, height=2, font=('arial', 20, 'bold'), bd=4, bg="gray20",
command= lambda: res.operation('pow')).grid(row=1, column=5, pady=1)
一切正常。
查询
我想解释一下这个 lambda 函数是如何解决这个错误的。而且,如果用户不按下按钮,该函数也不应该调用自身。这怎么编译?
【问题讨论】:
-
lambda 有点像函数定义,当您定义一个函数时,您还可以在该定义中调用另一个函数。并且定义中的函数只有在定义的函数被调用后才会被调用,所以当你在函数末尾添加
()时你正在调用它,而 lambda 是不允许立即调用的定义跨度> -
你知道
command=res.operation('pow')会立即执行res.operation('pow'),而不是在按钮被点击的时候? -
好吧,你怎么知道有 lambda 这样的东西?当你回到那个信息源并检查它的解释时发生了什么?另外,当您尝试将
python what is a lambda放入搜索引擎时发生了什么?解释基本概念的含义以及它们是如何工作的,这不是 Stack Overflow 的主题。您应该尝试查看现有的教程和文档,如果您仍然感到困惑,请尝试实际讨论论坛,例如 Reddit 或 Quora。 -
你到底有什么不明白的?
command需要一个可调用的(即一个函数)。当您不使用 lambda 表达式时,您将传递res.operation('pow')的结果,而不是传递可调用的(函数)。res.operation('pow')总是返回None,但程序永远不会到达那个点,而是在self.current = float(self.current)这一行出错,因为self.current是一个空字符串。 -
" 而且如果用户不按下按钮,函数也不应该调用自己。这怎么编译?"什么?当您使用
command= res.operation('pow')时,您正在调用该函数。
标签: python tkinter button lambda