Python 函数只接受2个参数(给定4个)

Python 函数只接受2个参数(给定4个),python,function,arguments,Python,Function,Arguments,我试图在raspberry pi上运行一些python代码,以模拟不同的传感器。当调用一个函数两次时,我被告知我提供了太多的参数。我将有大约20个不同的函数,所有这些函数都调用这个outputPWM函数,但我刚刚展示了两个函数作为示例 我这周才开始使用python,所以我不完全确定如何修复这个问题。如果我能在下次调用之前以某种方式清除参数的outputPWM函数,或者我的代码中可能存在一些基本缺陷 def输出脉宽调制(n1,i): num1=(n1.get()) 结果=整数(num1) duty

我试图在raspberry pi上运行一些python代码,以模拟不同的传感器。当调用一个函数两次时,我被告知我提供了太多的参数。我将有大约20个不同的函数,所有这些函数都调用这个
outputPWM
函数,但我刚刚展示了两个函数作为示例

我这周才开始使用python,所以我不完全确定如何修复这个问题。如果我能在下次调用之前以某种方式清除参数的
outputPWM
函数,或者我的代码中可能存在一些基本缺陷

def输出脉宽调制(n1,i): num1=(n1.get()) 结果=整数(num1) dutycycle=结果 打印(列表[25]) 列表[i]。开始(0) 列表[i]。更改dutycycle(dutycycle) 打印(“占空比为%d”%dutycycle) 打印(“输出位于端口%d”%i) def控件(): ControlReturn=tk.StringVar() ControlLabel=tk.Label(master,text=“控制回风温度(摄氏度)”).grid(行=0,列=0) ControlResult=tk.标签(主) ControlEntry=tk.Entry(主控,textvariable=ControlReturn).grid(行=0,列=2) 全局输出脉宽调制 输出PWM=部分(输出PWM,控制回路,20) buttonCal=tk.按钮(master,text=“Enter”,command=outputPWM).grid(行=0,列=3) def display(): DisplayReturn=tk.StringVar() DisplayLabel=tk.Label(master,text=“显示回风温度(摄氏度)”).grid(行=1,列=0) DisplayEntry=tk.Entry(master,textvariable=DisplayReturn).grid(行=1,列=2) 全局输出脉宽调制 outputPWM=部分(outputPWM,DisplayReturn,25) buttonCal=tk.按钮(master,text=“Enter”,command=outputPWM).grid(行=1,列=3) 显示() 控制() 我收到的错误是:

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)

无论您在何处创建分部函数,请为其命名为全局输出PWM以外的名称:

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

此代码执行两次,第一次在
display()
中执行,第二次在
control()
中执行(参数略有不同,但这并不重要)

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

解决方案是不重用相同的名称(请参阅),也不使用
global
,除非它不是真的需要

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