Je voudrais renvoyer deux valeurs d'une fonction dans deux variables distinctes. Par exemple:
def select_choice():
loop = 1
row = 0
while loop == 1:
print('''Choose from the following options?:
1. Row 1
2. Row 2
3. Row 3''')
row = int(input("Which row would you like to move the card from?: "))
if row == 1:
i = 2
card = list_a[-1]
Elif row == 2:
i = 1
card = list_b[-1]
Elif row == 3:
i = 0
card = list_c[-1]
return i
return card
Et je veux pouvoir utiliser ces valeurs séparément. Lorsque j'ai essayé d'utiliser return i, card
, il retourne un Tuple
et ce n'est pas ce que je veux.
Vous ne pouvez pas renvoyer deux valeurs, mais vous pouvez renvoyer 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 n-uplets sont créés par des virgules, les parenthèses ne sont donc pas obligatoires. Mais vous pouvez utiliser des parenthèses pour rendre votre code plus lisible ou pour scinder le tuple sur plusieurs lignes. Il en va de même pour la ligne my_i, my_card = select_choice()
.
Si vous souhaitez renvoyer plus de deux valeurs, envisagez d'utiliser un nommé Tuple . Cela permettra à l'appelant de la fonction d'accéder aux champs de la valeur renvoyée par leur nom, ce qui est plus lisible. Vous pouvez toujours accéder aux éléments du tuple par index. Par exemple, dans la méthode Schema.loads
, le cadre Marshmallow renvoie un UnmarshalResult
qui est un namedtuple
. Alors tu peux 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)
Je voudrais renvoyer deux valeurs d'une fonction dans deux variables distinctes.
À quoi vous attendez-vous à ce que cela ressemble à l'appel terminé? Vous ne pouvez pas écrire a = select_choice(); b = select_choice()
parce que la fonction serait appelée deux fois.
Les valeurs ne sont pas retournées "dans les variables"; ce n'est pas ainsi que Python fonctionne. Une fonction retourne des valeurs (objets). Une variable est juste un nom pour une valeur dans un contexte donné. Lorsque vous appelez une fonction et affectez la valeur de retour quelque part, vous attribuez un nom à la valeur reçue dans le contexte de l'appel. La fonction ne met pas la valeur "dans une variable" pour vous, l'affectation fait (peu importe que la variable ne soit pas "stockage" pour la valeur, mais encore, juste un nom).
Quand j'ai essayé d'utiliser
return i, card
, il retourne unTuple
et ce n'est pas ce que je veux.
En fait, c'est exactement ce que vous voulez. Tout ce que vous avez à faire est de séparer à nouveau la Tuple
.
Et je veux pouvoir utiliser ces valeurs séparément.
Il suffit donc de saisir les valeurs dans la variable Tuple
.
La façon la plus simple de le faire est de décompresser:
a, b = select_choice()
Je pense que ce que tu veux est un tuple. Si vous utilisez return (i, card)
, vous pouvez obtenir ces deux résultats en:
i, card = select_choice()
def test():
....
return r1, r2, r3, ....
>> ret_val = test()
>> print ret_val
(r1, r2, r3, ....)
maintenant, vous pouvez faire tout ce que vous voulez avec votre tuple.
def test():
r1 = 1
r2 = 2
r3 = 3
return r1, r2, r3
x,y,z = test()
print x
print y
print z
> test.py
1
2
3
Et ceci est une alternative.Si vous retournez sous forme de liste, il est simple d’obtenir les valeurs.
def select_choice():
...
return [i, card]
values = select_choice()
print values[0]
print values[1]
Vous pouvez aussi renvoyer plus d’une valeur en utilisant list. Vérifiez le code ci-dessous
def newFn(): #your function
result = [] #defining blank list which is to be return
r1 = 'return1' #first value
r2 = 'return2' #second value
result.append(r1) #adding first value in list
result.append(r2) #adding second value in list
return result #returning your list
ret_val1 = newFn()[1] #you can get any desired result from it
print ret_val1 #print/manipulate your your result