normal python que vous ne pouvez pas faire ce que vous voulez. il y a deux notions proches:
def myfunction(first, second, *args):
# args is a tuple of extra arguments
def myfunction(first, second, third=None):
# third is optional
toutefois, si vous vraiment voulez faire cela, vous pouvez certainement le faire fonctionner (au risque de choquer les traditionalistes ;o). en bref, vous devez écrire un wrapper(*args)
fonction qui vérifie le nombre d'arguments et de délégués, selon le cas. ce genre de "hack" se fait généralement via des décorateurs. dans ce cas, vous pourriez obtenir quelque chose comme:
@overload
def myfunction(first):
....
@myfunction.overload
def myfunction(first, second):
....
@myfunction.overload
def myfunction(first, second, third):
....
et vous mettriez en faisant de l' overload(first_fn)
de la fonction (ou le constructeur) renvoient un objet appelable où l' __call__(*args)
méthode de la délégation a expliqué ci-dessus et l' overload(another_fn)
méthode ajoute des fonctions supplémentaires qui peuvent être déléguées.
vous pouvez voir un exemple de quelque chose de similaire ici http://acooke.org/pytyp/pytyp.spec.dispatch.html mais c'est la surcharge de méthodes par type. c'est une approche très semblable...
Mise à JOUR: et quelque chose de similaire (à l'aide de types d'argument) est ajoutée à python 3 - http://www.python.org/dev/peps/pep-0443/