关于与某些 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 的程序员来说并不常见 我可以理解你是如何不确定这可能是在哪里计算的,但是函数名称应该是一个线索 calccalculationcalculate.

的缩写