functools部分使用Python中的逻辑问题



我目前正在学习Python GUI tkinter库。我在创建一个简单的计算器,现在我在使用类functools中的这个偏函数,现在从许多网站上我已经了解到,为了使用偏函数,你需要首先创建一个具有某种有限变量的函数,例如,3个变量

def sum(x , y , z):
return x+y+z

现在为了使用部分,你需要做以下

sum_new = partial(sum , 2 , 3)
print(sum_new(5))

基本上,执行上述语句将自动将值2分配给函数sum中的变量x,类似地,将值3分配给y,将值5分配给z。问题:我正在创建此计算器现在在调用语句中,我在不使用括号的情况下调用分部函数,这是为什么?

calculate = partial(calculation, empty_label , x1 , x2 , x3)
calculate_button = Button(Win , text = "Calculate" , activeforeground = 'red' , command = calculate)
calculate_button.grid(row = 4 , column = 0)

在上面查看命令=计算

第二点

def sum(Label , x1 , x2):
n1 = (x1.get())
n2 = (x2.get())
result = int(n1) + int(n2)
Label.config(text = "Sum is %d" %result)
return
def calculation(empty_label , x1 , x2 ,x3):
n3 = (x3.get())
if n3 == '+':
sum1 = partial(sum , empty_label , x1 ,x2)
sum1()

为什么这里我需要在括号中使用sum1((,而在点1中我不需要任何括号。虽然我们知道sum1不是一个函数,但请解释这些点。感谢

我正在创建这个计算器现在在调用语句时,我在不使用括号的情况下调用分部函数,为什么?

因为command参数需要对函数的引用。如果使用括号,则实际调用函数并将返回值分配给命令。唯一有效的方法是函数本身返回另一个函数,如partial

换句话说,这个:

Button(..., command=x())

与此相同:

result = x()
Button(..., command=result)

当您使用command选项时,您实际上是在为按钮提供单击按钮时要调用的函数的名称

为什么这里我需要在括号中使用sum1((,而在第1点中我不需要任何括号。

因为在创建标签时,您希望立即执行计算。使用括号是对函数的引用和实际调用函数之间的区别。

在编程中,有时你需要引用,有时你想要函数的结果。command选项是您需要参考的时候之一。

另一种想法是这样的:想象一下,如果你问你的朋友"我用什么函数加5和3",他们回答"8"。在这种情况下,您不希望他们为您进行加法运算,而是希望他们告诉您函数(例如sum(的名称,以便您以后进行计算。

最新更新