
En Python, vous pouvez définir des valeurs par défaut pour les arguments lors de la définition des fonctions. La valeur par défaut sera utilisée si vous omettez l’argument lors de l’appel de la fonction.
Cet article décrit le contenu suivant.
- Définir les valeurs d’argument par défaut
- Contraintes de position des arguments par défaut
- Remarques sur l’utilisation de listes et de dictionnaires comme valeurs par défaut
Consultez l’article suivant pour les bases des fonctions en Python.
Définir les valeurs d’argument par défaut
Si vous utilisez argument_name=default_value dans la définition de la fonction, la valeur par défaut sera utilisée lorsque l’argument correspondant est omis.
def func_default(arg1, arg2='default_x', arg3='default_y'):
print(arg1)
print(arg2)
print(arg3)
func_default('a')
# a
# default_x
# default_y
func_default('a', 'b')
# a
# b
# default_y
func_default('a', arg3='c')
# a
# default_x
# c
Contraintes de position des arguments par défaut
Lors de la définition de la fonction, placer un argument par défaut avant un argument ordinaire (= argument sans valeur par défaut) provoque SyntaxError.
# def func_default_error(arg2='default_a', arg3='default_b', arg1):
# print(arg1)
# print(arg2)
# SyntaxError: non-default argument follows default argument
Remarques sur l’utilisation de listes et de dictionnaires comme valeurs par défaut
Si un objet modifiable tel qu’une liste ou un dictionnaire est spécifié comme valeur par défaut, l’objet est créé à la définition de la fonction et le même objet est utilisé lorsque la fonction est appelée avec l’argument correspondant omis.
Les valeurs de paramètre par défaut sont évaluées de gauche à droite lorsque la définition de la fonction est exécutée. Cela signifie que l’expression est évaluée une fois, lors de la définition de la fonction, et que la même valeur « pré-calculée » est utilisée pour chaque appel.
8. Instructions composées – Définitions de fonctions — Documentation Python 3.7.4rc1
Par conséquent, par exemple, si vous définissez une fonction qui ajoute un élément à une liste ou à un dictionnaire comme argument par défaut et que vous omettez l’argument et que vous l’appelez plusieurs fois, l’élément sera ajouté à plusieurs reprises au même objet.
Exemple pour une liste :
def func_default_list(l=[0, 1, 2], v=3):
l.append(v)
print(l)
func_default_list([0, 0, 0], 100)
# [0, 0, 0, 100]
func_default_list()
# [0, 1, 2, 3]
func_default_list()
# [0, 1, 2, 3, 3]
func_default_list()
# [0, 1, 2, 3, 3, 3]
Exemple pour un dictionnaire :
def func_default_dict(d={'default': 0}, k='new', v=100):
d[k] = v
print(d)
func_default_dict()
# {'default': 0, 'new': 100}
func_default_dict(k='new2', v=200)
# {'default': 0, 'new': 100, 'new2': 200}
Utilisez None pour créer un nouvel objet si l’argument est omis. Un nouvel objet est créé à chaque fois que la fonction est appelée.
def func_default_list_none(l=None, v=3):
if l is None:
l = [0, 1, 2]
l.append(v)
print(l)
func_default_list_none()
# [0, 1, 2, 3]
func_default_list_none()
# [0, 1, 2, 3]