我目前正在学习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
(的名称,以便您以后进行计算。