如何在python中重载函数?

如何在python中重载函数?,python,Python,在python中,我似乎无法重载以下函数: #!/usr/bin/env python import subprocess def my_function (a) : subprocess.call(['proc', a]) return; def my_function (a, b) : subprocess.call(['proc','-i',a,b]) return; def my_function (a, b, c, d) : subproc

在python中,我似乎无法重载以下函数:

#!/usr/bin/env python

import subprocess
def my_function (a) :
    subprocess.call(['proc', a])
    return;

def my_function (a, b) :
    subprocess.call(['proc','-i',a,b])
    return;

def my_function (a, b, c, d) :
    subprocess.call(['proc','-i',a,b,'-u',c,d])
    return; 
例如,当我打电话给:

mymodules.my_function("a", "b")
我得到:

Traceback (most recent call last):
  File "sample.py", line 11, in <module>
    mymodules.my_function("a", "b") 
TypeError: my_function() takes exactly 4 arguments (2 given)
回溯(最近一次呼叫最后一次):
文件“sample.py”,第11行,在
mymodules.my_函数(“a”、“b”)
TypeError:my_函数()正好接受4个参数(给定2个)

为什么它尝试调用带有4个参数的函数?

因为函数重载在python中不像在其他语言中那样有效

我要做的是:

def my_function (a, b=None, c=None, d=None) :
    if b is None:
        subprocess.call(['proc', a])
    elif c is None:
        subprocess.call(['proc','-i',a,b])
    else:
        subprocess.call(['proc','-i',a,b,'-u',c,d])
    return; 

它将自动检测您输入的变量,并在默认情况下用“无”填充未输入的变量。当然,要使其工作,变量的值决不能为None

Python不支持设计上的重载。函数在Python中不是这样工作的。它们是对象,就像其他任何东西一样,因此一次只能调用一个
my_function
。因为这是定义所有三个函数之后唯一存在的版本,因为它是最后定义的。不清楚你为什么认为你可以这么做。