Python Language Déballage des arguments de la fonction


Exemple

Lorsque vous souhaitez créer une fonction pouvant accepter un nombre quelconque d'arguments, et ne pas appliquer la position ou le nom de l'argument à la compilation, il est possible et voici comment:

def fun1(*args, **kwargs):
    print(args, kwargs)

Les paramètres *args et **kwargs sont des paramètres spéciaux définis respectivement sur un tuple et un dict :

fun1(1,2,3)
# Prints: (1, 2, 3) {}
fun1(a=1, b=2, c=3)
# Prints: () {'a': 1, 'b': 2, 'c': 3}
fun1('x', 'y', 'z', a=1, b=2, c=3)
# Prints: ('x', 'y', 'z') {'a': 1, 'b': 2, 'c': 3}

Si vous regardez suffisamment de code Python, vous découvrirez rapidement qu'il est largement utilisé lors du passage d'arguments à une autre fonction. Par exemple, si vous souhaitez étendre la classe de chaîne:

class MyString(str):
    def __init__(self, *args, **kwarg):
        print('Constructing MyString')
        super(MyString, self).__init__(*args, **kwarg)