关于与某些 Python 计算器 GUI 代码相关的 lambda 和 eval 的问题
Questions about lambda and eval in relation to some Python calculator GUI code
这里是一些代码;
from Tkinter import*
def button (source, side, text, command = None) :
storeObj = Button(source, text=text, command=command)
storeObj.pack(side=side, expand=YES, fill=BOTH)
return storeObj
EqualsButton = Calculator(self, TOP)
for Equals in '=':
if Equals == '=':
btnEquals = button(EqualsButton, LEFT, Equals)
btnEquals.bind('<ButtonRelease-1>',
lambda e, s=self, storeObj=display: s.calc(storeObj), '+')
else:
btnEquals = button(EqualsButton, LEFT, Equals,
lambda storeObj=display, s=' %s ' %Equals: storeObj.set(storeObj.get()+s))
def calc(self, display):
try:
display.set(eval(display.get()))
except:
display.set("ERROR")
if __name__ == '__main__':
app().mainloop()
我了解前几个块的大部分,我可以稍后调用这些功能来构建计算器(即按钮和框架)。我不明白也没有解释的是诸如 storeObj 和 storeObj.pack 之类的语法。我也不完全理解实际计算的执行位置,我假设它在 EqualsButton 块中,特别是两个 lambda 语句,我无法理解 lambda 实际在做什么,即使我'我熟悉很多语法。我用 C 语言编写了一个计算器,它相当直观,但是当谈到这个 python 代码时,我不知道我在看什么,或者我应该寻找什么。如果有人快速介绍一下就好了。刚接触编程所以请原谅豌豆脑。
编辑:删除一些不相关的代码。已经得到了一些很好的答案,谢谢。我可以私信完整的程序给任何想要的人。
分配的变量就是这样。由编码器分配。我有 variable_name = 对象。如果在某个时候使用了 Tkinter 特定变量,则很可能是在 tkinter 方法中的参数中使用的 PSEUDO-CONSTANT。您永远不应该尝试更改属于 tkinter 库的预定义变量。
pack()
部分只是将 Frame 对象放在根 window 中以供用户查看。
pack()
是一组几何管理器的一部分,用于在 GUI 上放置对象,例如框架或文本框或输入字段等等。 pack()
或任何几何管理器的详细信息在 tkinter 文档中有详细记录。
Lambda 语句也被广泛记录,但它们只是匿名函数。这意味着您不需要为该函数指定一个名称。它们也是单行函数。它们的使用在 python 和 tkinter 中很常见。
至于计算实际发生的地方是eval
操作。
这是用于执行实际计算的代码。
def calc(self, display):
try:
display.set(eval(display.get()))
except:
display.set("ERROR")
此方法具体是执行计算的方法:
eval(display.get())
因为 eval
对于新程序员或刚接触 python 的程序员来说并不常见 我可以理解你是如何不确定这可能是在哪里计算的,但是函数名称应该是一个线索 calc
是 calculation
或 calculate
.
的缩写
这里是一些代码;
from Tkinter import*
def button (source, side, text, command = None) :
storeObj = Button(source, text=text, command=command)
storeObj.pack(side=side, expand=YES, fill=BOTH)
return storeObj
EqualsButton = Calculator(self, TOP)
for Equals in '=':
if Equals == '=':
btnEquals = button(EqualsButton, LEFT, Equals)
btnEquals.bind('<ButtonRelease-1>',
lambda e, s=self, storeObj=display: s.calc(storeObj), '+')
else:
btnEquals = button(EqualsButton, LEFT, Equals,
lambda storeObj=display, s=' %s ' %Equals: storeObj.set(storeObj.get()+s))
def calc(self, display):
try:
display.set(eval(display.get()))
except:
display.set("ERROR")
if __name__ == '__main__':
app().mainloop()
我了解前几个块的大部分,我可以稍后调用这些功能来构建计算器(即按钮和框架)。我不明白也没有解释的是诸如 storeObj 和 storeObj.pack 之类的语法。我也不完全理解实际计算的执行位置,我假设它在 EqualsButton 块中,特别是两个 lambda 语句,我无法理解 lambda 实际在做什么,即使我'我熟悉很多语法。我用 C 语言编写了一个计算器,它相当直观,但是当谈到这个 python 代码时,我不知道我在看什么,或者我应该寻找什么。如果有人快速介绍一下就好了。刚接触编程所以请原谅豌豆脑。
编辑:删除一些不相关的代码。已经得到了一些很好的答案,谢谢。我可以私信完整的程序给任何想要的人。
分配的变量就是这样。由编码器分配。我有 variable_name = 对象。如果在某个时候使用了 Tkinter 特定变量,则很可能是在 tkinter 方法中的参数中使用的 PSEUDO-CONSTANT。您永远不应该尝试更改属于 tkinter 库的预定义变量。
pack()
部分只是将 Frame 对象放在根 window 中以供用户查看。
pack()
是一组几何管理器的一部分,用于在 GUI 上放置对象,例如框架或文本框或输入字段等等。 pack()
或任何几何管理器的详细信息在 tkinter 文档中有详细记录。
Lambda 语句也被广泛记录,但它们只是匿名函数。这意味着您不需要为该函数指定一个名称。它们也是单行函数。它们的使用在 python 和 tkinter 中很常见。
至于计算实际发生的地方是eval
操作。
这是用于执行实际计算的代码。
def calc(self, display):
try:
display.set(eval(display.get()))
except:
display.set("ERROR")
此方法具体是执行计算的方法:
eval(display.get())
因为 eval
对于新程序员或刚接触 python 的程序员来说并不常见 我可以理解你是如何不确定这可能是在哪里计算的,但是函数名称应该是一个线索 calc
是 calculation
或 calculate
.