Kaip grąžinti dvi reikšmes iš funkcijos „python“?

Norėčiau grąžinti dvi funkcijas iš dviejų skirtingų kintamųjų. Pavyzdžiui:

 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 

Ir aš noriu, kad šios vertės būtų naudojamos atskirai. Kai bandžiau naudoti „ return i, card , ji grąžina tuple , ir tai nėra tas, ko noriu.

127
17 марта '12 в 22:18 2012-03-17 22:18 Lycon rinkosi kovo 17 d., 12 val. 18:18 PM 2012-03-17 22:18
@ 7 atsakymai

Negalite grąžinti dviejų reikšmių, tačiau po skambučio galite grąžinti tuple arba list ir išpakuoti:

 def select_choice(): ... return i, card # or [i, card] my_i, my_card = select_choice() 

Eilutėje return i, card i, card - tai paketo sukūrimas. Taip pat galite naudoti return (i, card) tipo skliaustelius, tačiau paketai sukurti su kableliu, todėl parenai yra neprivalomi. Bet jūs galite naudoti parenus, kad kodą būtų lengviau skaityti arba pertrauka į kelias eilutes. Tas pats pasakytina apie eilutę my_i, my_card = select_choice() .

Jei norite grąžinti daugiau nei dvi vertes, naudokite pavadinimą . Tai leidžia skambinimo funkcijai pasiekti grąžinimo vertės laukus pagal pavadinimą, kuris yra lengviau skaitomas. Vis dar galite pasiekti elemento elementus pagal indeksą. Pavyzdžiui, metodas „ Schema.loads , „ Schema.loads struktūra grąžina „ UnmarshalResult , kuris yra namedtuple . Taigi galite padaryti:

 data, errors = MySchema.loads(request.json()) if errors: ... 

arba

 result = MySchema.loads(request.json()) if result.errors: ... else: # use `result.data` 

Kitais atvejais galite grąžinti dict iš savo funkcijos:

 def select_choice(): ... return {'i': i, 'card': card, 'other_field': other_field, ...} 

Bet galbūt norėsite grąžinti naudingumo klasės egzempliorių, kuris apgaubia jūsų duomenis:

 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) 
279
17 марта '12 в 22:20 2012-03-17 22:20 atsakymą pateikė Warvariuc kovo 17 d., 12 val. 10:20 val. 2012-03-17 22:20

Norėčiau grąžinti dvi funkcijas iš dviejų skirtingų kintamųjų.

Ką tikitės, kad jis atrodytų išblaškantis? Jūs negalite rašyti a = select_choice(); b = select_choice() a = select_choice(); b = select_choice() , nes ji paskambins funkcijai du kartus.

Vertės negrąžinamos „kintamuosiuose“; taip veikia ne Python. Funkcija grąžina reikšmes (objektus). Kintamasis yra tik vertės pavadinimas konkrečiame kontekste. Kai skambinate funkcijai ir kažkur priskirkite grąžos vertę, tai, ką darote, suteikia gautai vertei pavadinimą skambinančiame kontekste. Funkcija jums nereiškia reikšmės „kintamasis“, priskyrimas (nesvarbu, ar kintamasis nėra „saugykla“, bet ir vėl tik pavadinimas).

Kai bandžiau naudoti „ return i, card , ji grąžina tuple , ir tai nėra tas, ko noriu.

Tiesą sakant, tai būtent tai, ko norite. Viskas, ką jums reikia padaryti, yra dar kartą atskirti tuple .

Ir aš noriu, kad šios vertės būtų naudojamos atskirai.

Taigi paimkite vertes iš tuple .

Paprasčiausias būdas tai padaryti yra išpakuoti:

 a, b = select_choice() 
22
17 марта '12 в 23:30 2012-03-17 23:30 Karlo Knechtelio atsakymą pateikė kovo 17 d. 12 val. 23:30 2012-03-17 23:30

Manau, kad tai, ko norite, yra eilutė. Jei naudojate return (i, card) , galite gauti šiuos du rezultatus:

 i, card = select_choice() 
15
17 марта '12 в 22:20 2012-03-17 22:20 atsakymą pateikė „ Hayrich5991“ kovo 17 d., 12 d., 10:20 val. 2012-03-17 22:20
 def test(): .... return r1, r2, r3, .... >> ret_val = test() >> print ret_val (r1, r2, r3, ....) 

Dabar galite padaryti viską, ką norite, naudodamiesi paketu.

7
17 марта '12 в 23:11 2012-03-17 23:11 atsakymas pateikiamas Amin kovo 17 d., 12 val. 23:11 2012-03-17 23:11

Ir tai yra alternatyva. Jei grįšite kaip sąrašą, tada tiesiog gaukite vertes.

 def select_choice(): ... return [i, card] values = select_choice() print values[0] print values[1] 
0
17 апр. atsakymas pateikiamas praveen 17 Bal 2017-04-17 10:16 '17 prie 10:16 2017-04-17 10:16
 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 
0
31 авг. atsakymas, kurį pateikė user8541092 31 rug . 2017-08-31 06:15 '17 6:15 am 2017-08-31 06:15

Naudodamiesi sąrašu taip pat galite grąžinti daugiau nei vieną vertę. Patikrinkite toliau pateiktą kodą.

 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 
0
21 дек. Atsakymas pateikiamas kaushik karan 21 dec. 2016-12-21 13:38 '16, 13:38 pm 2016-12-21 13:38