Comment renvoyer plusieurs valeurs de retour dans une fonction Python

Affaires

En C, renvoyer plusieurs valeurs de retour d'une fonction est assez fastidieux, mais en Python, c'est très facile à faire.

Retour séparé par des virgules

En Python, vous pouvez simplement renvoyer une liste de chaînes de caractères ou de nombres séparés par des virgules.

Par exemple, définissez une fonction qui renvoie uniquement une chaîne de caractères et un nombre comme indiqué ci-dessous, chacun étant séparé par une virgule après le retour.

def test():
    return 'abc', 100

En Python, les valeurs séparées par des virgules sont considérées comme des tuples sans parenthèses, sauf lorsque cela est nécessaire du point de vue syntaxique. Par conséquent, la fonction de l'exemple ci-dessus renvoie un tuple dont chaque valeur est un élément.

C'est la virgule qui crée le tuple, pas les parenthèses. Les parenthèses peuvent être omises, sauf dans le cas de tuples vides ou lorsque cela est nécessaire pour éviter toute ambiguïté syntaxique.
Built-in Types — Python 3.10.0 Documentation

Le type de la valeur de retour est un tuple.

result = test()

print(result)
print(type(result))
# ('abc', 100)
# <class 'tuple'>

Chaque élément sera du type défini par la fonction.

print(result[0])
print(type(result[0]))
# abc
# <class 'str'>

print(result[1])
print(type(result[1]))
# 100
# <class 'int'>

Erreur si vous spécifiez un index qui dépasse le nombre de valeurs de retour que vous avez défini.

# print(result[2])
# IndexError: tuple index out of range

Il peut être décomposé et plusieurs valeurs de retour peuvent être affectées à des variables distinctes.

a, b = test()

print(a)
# abc

print(b)
# 100

Il en va de même si vous souhaitez spécifier trois valeurs de retour ou plus au lieu de deux seulement.

def test2():
    return 'abc', 100, [0, 1, 2]

a, b, c = test2()

print(a)
# abc

print(b)
# 100

print(c)
# [0, 1, 2]

Renvoie une liste.

[]Si vous l'enfermez avec ceci, la valeur de retour sera une liste au lieu d'un tuple.

def test_list():
    return ['abc', 100]

result = test_list()

print(result)
print(type(result))
# ['abc', 100]
# <class 'list'>