函数正好接受2个参数(给定4个)

时间:2019-08-15 07:16:55

标签: python function arguments

我试图在树莓派上运行一些python代码,以模拟不同的传感器。当两次调用一个函数时,被告知我提供了太多参数。我将有大约20个不同的函数都调用此outputPWM函数,但是我仅以两个函数为例。

我本周才开始使用python,所以我不确定如何解决此问题。如果我可以在下一次调用之前以某种方式清除参数的outputPWM函数,否则我的代码可能有一些根本性的缺陷

def outputPWM(n1,i):
    num1 = (n1.get()) 
    result = int(num1)
    dutycycle = result 
    print(List[25])
    List[i].start(0)
    List[i].ChangeDutyCycle(dutycycle)
    print("Duty cycle is %d" % dutycycle)
    print("output is on port %d" %i)

def control():
    ControlReturn = tk.StringVar()  
    ControlLabel = tk.Label(master, text="Control Return Air Temperature (Degrees Celcius)").grid(row=0, column=0)  
    ControlResult = tk.Label(master)  
    ControlEntry = tk.Entry(master, textvariable=ControlReturn).grid(row=0,column=2)
    global outputPWM
    outputPWM=partial(outputPWM,ControlReturn,20)  
    buttonCal = tk.Button(master, text="Enter", command=outputPWM).grid(row=0, column=3) 

def display():   
    DisplayReturn = tk.StringVar()  
    DisplayLabel = tk.Label(master,text="Display Return Air Temperature (Degrees Celcius)").grid(row=1, column=0)  
    DisplayEntry = tk.Entry(master, textvariable=DisplayReturn).grid(row=1,column=2)
    global outputPWM
    outputPWM= partial(outputPWM,DisplayReturn,25)
    buttonCal = tk.Button(master, text="Enter", command=outputPWM).grid(row=1, column=3)

display()
control()

我收到的错误是:

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1550, in __call__
    return self.func(*args)
TypeError: outputPWM() takes exactly 2 arguments (4 given)

2 个答案:

答案 0 :(得分:0)

无论何时创建局部函数,都应为其命名而不是全局outputPWM:

global outputPWM
outputPWM_ = partial(outputPWM, ControlReturn, 20)
buttonCal = tk.Button(master, text="Enter", command=outputPWM_).grid(row=0, column=3)

答案 1 :(得分:0)

此代码执行两次,第一次在display()中执行,第二次在control()中执行(参数稍有不同,但这无关紧要)

global outputPWM
outputPWM=partial(outputPWM,ControlReturn,20)

它用派生的部分函数替换原始函数,该函数添加了2个args。第二轮用从第一部分函数派生的另一个部分函数替换该部分函数。结果函数分两步添加2 + 2 args。这就是“需要2个参数(给定4个)”错误的原因。

除非确实没有必要,否则解决方案不会重复使用相同的名称(请参见https://en.wikipedia.org/wiki/Variable_shadowing)并且不使用global