En Python, vous pouvez développer une liste, un tuple et un dictionnaire ( 𝐝𝐢𝐜𝐭 ) et transmettre leurs éléments comme arguments en préfixant une liste ou un tuple avec un astérisque ( * ) et en préfixant un dictionnaire avec deux astérisques ( ** ) lors de l’appel de fonctions.
Pour une compréhension de base des fonctions Python, des valeurs de paramètres par défaut et des arguments de longueur variable utilisant * et ** lors de la définition de fonction, reportez-vous aux articles suivants.
- définir et appeler des fonctions en Python (def, return)
- Valeurs de paramètres par défaut pour les fonctions en Python
- *𝐚𝐫𝐠𝐬 et **𝐤𝐰𝐚𝐫𝐠𝐬 en Python (arguments de longueur variable)
Développer une liste et un tuple avec *
En spécifiant une liste ou un tuple préfixé par * comme argument, il est développé et chaque élément est passé comme un argument séparé.
def func(arg1, arg2, arg3): print('arg1 =', arg1) print('arg2 =', arg2) print('arg3 =', arg3) l = ['one', 'two', 'three'] func(*l) # arg1 = one # arg2 = two # arg3 = three func(*['one', 'two', 'three']) # arg1 = one # arg2 = two # arg3 = three t = ('one', 'two', 'three') func(*t) # arg1 = one # arg2 = two # arg3 = three func(*('one', 'two', 'three')) # arg1 = one # arg2 = two # arg3 = three
L’exemple de code suivant utilise des listes, mais la même chose a choisi de s’appliquer aux tuples.
Si le nombre d’éléments ne correspond pas au nombre d’arguments, une T𝐲𝐩𝐞E𝐫𝐫𝐨𝐫 est levée.
# func(*['one', 'two']) # TypeError: func() missing 1 required positional argument: 'arg3' # func(*['one', 'two', 'three', 'four']) # TypeError: func() takes 3 positional arguments but 4 were given
Avec les arguments par défaut
Si la fonction possède des arguments par défaut, ces valeurs par défaut sont utilisées lorsqu’il n’y a pas assez d’éléments. S’il ya trop d’éléments, une T𝐲𝐩𝐞E𝐫𝐫𝐨𝐫 est découverte.
def func_default(arg1=1, arg2=2, arg3=3): print('arg1 =', arg1) print('arg2 =', arg2) print('arg3 =', arg3) func_default(*['one', 'two']) # arg1 = one # arg2 = two # arg3 = 3 func_default(*['one']) # arg1 = one # arg2 = 2 # arg3 = 3 # func_default(*['one', 'two', 'three', 'four']) # TypeError: func_default() takes from 0 to 3 positional arguments but 4 were given
Avec des arguments de longueur variable ( *𝐚𝐫𝐠𝐬 )
Si la fonction a un argument de longueur variable ( *𝐚𝐫𝐠𝐬 ), tous les éléments suivant l’argument positionnel sont passés à l’argument de longueur variable.
def func_args(arg1, *args): print('arg1 =', arg1) print('args =', args) func_args(*['one', 'two']) # arg1 = one # args = ('two',) func_args(*['one', 'two', 'three']) # arg1 = one # args = ('two', 'three') func_args(*['one', 'two', 'three', 'four']) # arg1 = one # args = ('two', 'three', 'four')
Développer un dictionnaire ( 𝐝𝐢𝐜𝐭 ) avec **
En spécifiant un dictionnaire ( 𝐝𝐢𝐜𝐭 ) préfixé par ** comme argument, chaque paire clé-valeur est passée comme argument de mot-clé.
def func(arg1, arg2, arg3): print('arg1 =', arg1) print('arg2 =', arg2) print('arg3 =', arg3) d = {'arg1': 'one', 'arg2': 'two', 'arg3': 'three'} func(**d) # arg1 = one # arg2 = two # arg3 = three func(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three'}) # arg1 = one # arg2 = two # arg3 = three
S’il n’y a pas assez de clés ou si les clés ne correspondent pas aux noms des arguments, un T𝐲𝐩𝐞E𝐫𝐫𝐨𝐫 est déclencher.
# func(**{'arg1': 'one', 'arg2': 'two'}) # TypeError: func() missing 1 required positional argument: 'arg3' # func(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three', 'arg4': 'four'}) # TypeError: func() got an unexpected keyword argument 'arg4'
Avec les arguments par défaut
Si la fonction possède des arguments par défaut, seule la valeur de l’argument dont le nom correspond à une clé du dictionnaire est mise à jour. Si une clé ne correspond pas au nom de l’argument, une erreur T𝐲𝐩𝐞E𝐫𝐫𝐨𝐫 est générée.
def func_default(arg1=1, arg2=2, arg3=3): print('arg1 =', arg1) print('arg2 =', arg2) print('arg3 =', arg3) func_default(**{'arg1': 'one'}) # arg1 = one # arg2 = 2 # arg3 = 3 func_default(**{'arg2': 'two', 'arg3': 'three'}) # arg1 = 1 # arg2 = two # arg3 = three # func_default(**{'arg1': 'one', 'arg4': 'four'}) # TypeError: func_default() got an unexpected keyword argument 'arg4'
Avec des arguments de longueur variable ( **𝐤𝐰𝐚𝐫𝐠𝐬 )
Si la fonction possède un argument de longueur variable ( **𝐤𝐰𝐚𝐫𝐠𝐬 ), tous les éléments dont les clés ne correspondant pas au nom de l’argument sont passés à l’argument de longueur variable.
def func_kwargs(arg1, **kwargs): print('arg1 =', arg1) print('kwargs =', kwargs) func_kwargs(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three'}) # arg1 = one # kwargs = {'arg2': 'two', 'arg3': 'three'} func_kwargs(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three', 'arg4': 'four'}) # arg1 = one # kwargs = {'arg2': 'two', 'arg3': 'three', 'arg4': 'four'} func_kwargs(**{'arg1': 'one', 'arg3': 'three'}) # arg1 = one # kwargs = {'arg3': 'three'}
