如何重载Python中的函数?

u12*_*123 0 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) :
    subprocess.call(['proc','-i',a,b,'-u',c,d])
    return; 
Run Code Online (Sandbox Code Playgroud)

例如,当我打电话时:

mymodules.my_function("a", "b")
Run Code Online (Sandbox Code Playgroud)

我得到:

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)
Run Code Online (Sandbox Code Playgroud)

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

WNG*_*WNG 5

因为函数重载在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; 
Run Code Online (Sandbox Code Playgroud)

它会自动检测您输入的变量,并默认将未输入的变量填充为“None”。当然,要使其正常工作,您的变量绝不能采用 None 的值