Vous ne pouvez pas retourner deux valeurs, mais vous pouvez retourner un tuple
ou un list
et le décompresser après l'appel:
def select_choice():
...
return i, card # or [i, card]
my_i, my_card = select_choice()
En ligne return i, card
i, card
signifie créer un tuple. Vous pouvez également utiliser des parenthèses comme return (i, card)
, mais les tuples sont créés par des virgules, les parenthèses ne sont donc pas obligatoires. Mais vous pouvez utiliser des parens pour rendre votre code plus lisible ou pour diviser le tuple sur plusieurs lignes. La même chose s'applique à la ligne my_i, my_card = select_choice()
.
Si vous souhaitez renvoyer plus de deux valeurs, pensez à utiliser un tuple nommé . Cela permettra à l'appelant de la fonction d'accéder aux champs de la valeur retournée par son nom, qui est plus lisible. Vous pouvez toujours accéder aux éléments du tuple par index. Par exemple, dans la Schema.loads
méthode, le framework Marshmallow renvoie un UnmarshalResult
qui est un namedtuple
. Vous pouvez donc faire:
data, errors = MySchema.loads(request.json())
if errors:
...
ou
result = MySchema.loads(request.json())
if result.errors:
...
else:
# use `result.data`
Dans d'autres cas, vous pouvez renvoyer un dict
de votre fonction:
def select_choice():
...
return {'i': i, 'card': card, 'other_field': other_field, ...}
Mais vous voudrez peut-être envisager de renvoyer une instance d'une classe utilitaire, qui encapsule vos données:
class ChoiceData():
def __init__(self, i, card, other_field, ...):
# you can put here some validation logic
self.i = i
self.card = card
self.other_field = other_field
...
def select_choice():
...
return ChoiceData(i, card, other_field, ...)
choice_data = select_choice()
print(choice_data.i, choice_data.card)