Skip to content

Décompresser et passer une liste, un tuple, un dict en argument de fonction en Python

En Python, vous pouvez décompresser list, tuple, dict (dictionnaire) et transmettre ses éléments pour fonctionner comme arguments en ajoutant * à list ou tuple et ** au dictionnaire lors de l’appel de la fonction.

Cet article décrit le contenu suivant.

  • Décompressez la liste et le tuple avec *
    • Avec des arguments par défaut
    • Avec des arguments de longueur variable
  • Décompressez dict (dictionnaire) avec **
    • Avec des arguments par défaut
    • Avec des arguments de longueur variable

Notez que si list, tuple ou dict est spécifié comme argument sans * ou **, il ne doit pas être décompressé et transmis à la fonction tel quel.

Consultez les articles suivants pour l’utilisation de base des fonctions dans Python, les arguments par défaut et les arguments de longueur variable avec * et ** lors de la définition des fonctions.

Décompressez la liste et le tuple avec *

Lorsque vous spécifiez une liste ou un tuple avec * comme argument, il est décompressé et chaque élément est passé à chaque argument.

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

Les listes sont utilisées dans l’exemple de code suivant, mais il en va de même pour les tuples.

Si le nombre d’éléments ne correspond pas au nombre d’arguments, TypeError est déclenché.

# 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 des arguments par défaut

Si la fonction a des arguments par défaut, les arguments par défaut sont utilisés si le nombre d’éléments est insuffisant. S’il y a beaucoup d’éléments, TypeError est déclenché.

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 (*args), tous les éléments après 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écompressez dict (dictionnaire) avec **

En ajoutant ** à dict (dictionnaire) et en le spécifiant comme argument, ses clés et ses valeurs sont traitées comme des noms et des valeurs d’arguments. Chaque élément est passé en tant qu’arguments de mots-clés.

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 de clés qui ne correspondent pas aux noms d’arguments, TypeError est déclenché.

# 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 des arguments par défaut

Si la fonction a des arguments par défaut, seule la valeur du nom de l’argument correspondant à la clé du dictionnaire est mise à jour.

Si une clé ne correspond pas au nom de l’argument, TypeError est déclenché.

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 a un argument de longueur variable (**kwargs), tous les éléments avec des clés qui ne correspondent 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'}