3.4. Arguments#

Pour le moment, nous avons vu que les fonctions pouvaient avoir autant d’arguments que souhaité. Il est également possible d’avoir des arguments optionnels. Les arguments optionnels doivent avoir une valeur par défaut (s’ils ne sont pas renseignés, il faut que le code leur attribue quand même une valeur) et il faut qu’ils soient placés après les arguments obligatoires.

Nous avons déjà vu de tels arguments optionnels dans la fonction print par exemple.

La syntaxe est la suivante :

def f(x, y, z=0, n=1):
    return (x+y+z)**n
def f(x, y, z=0, n=1):
    return (x+y+z)**n

print(f(1, 1))
print(f(1, 1, z=1))
print(f(1, 1, n=2))
print(f(1, 1, 1, 3))
print(f(1, 1, z=1, n=3))
print(f(1, 1, n=3, z=1))
2
3
4
27
27
27
help(print)
print("toto", "titi", sep='!!!')
Help on built-in function print in module builtins:

print(*args, sep=' ', end='\n', file=None, flush=False)
    Prints the values to a stream, or to sys.stdout by default.
    
    sep
      string inserted between values, default a space.
    end
      string appended after the last value, default a newline.
    file
      a file-like object (stream); defaults to the current sys.stdout.
    flush
      whether to forcibly flush the stream.

toto!!!titi

ATTENTION : POUR LES PLUS INTRÉPIDES !!!

Il est également possible d’avoir une fonction avec un nombre arbitraire d’arguments. Pour cela il faut utiliser la convention de python et avoir un argument *args (le dernier de la liste sauf s’il y a un **) pour les arguments obligatoires et un argument **kwargs pour les arguments optionnels. Les noms args et kwargs ne sont pas obligatoires (ce sont les étoiles qui le sont).

Voici un exemple qui affiche seulement les arguments passés !

def jaffichemesarguments(*args, **kwargs):
    print(f"Les arguments obligatoires sont rangés dans un {type(args)}")
    print(f"Les arguments optionnels sont rangés dans un {type(kwargs)}")
    for k, argk in enumerate(args):
        print(f"L'argument {k} est {argk}")
    for key, val in kwargs.items():
        print(f"L'argument {key} est {val}")
jaffichemesarguments(1, 2, 3, 4, 17, zz=3, y=2, z='toto')
Les arguments obligatoires sont rangés dans un <class 'tuple'>
Les arguments optionnels sont rangés dans un <class 'dict'>
L'argument 0 est 1
L'argument 1 est 2
L'argument 2 est 3
L'argument 3 est 4
L'argument 4 est 17
L'argument zz est 3
L'argument y est 2
L'argument z est toto