4.2 Vērtību atgriešana (return)
Stundas uzdevums: Izprast datu plūsmu funkcijās un pielietot Return statement (Atgriešanas komandu), lai aprēķinu rezultātus padotu atpakaļ galvenajai programmai tālākai apstrādei.
70 min plāns: Teorija un paraugs (~10 min) · 1. uzdevums (~15 min) - salīdzini print un return · 2. uzdevums (~25 min) - uzraksti bonusa funkciju ar return · 3. uzdevums (~20 min) - saliec divas funkcijas kopā vienā aprēķinā. Papildu uzdevumu sāc tikai tad, ja pārējie trīs ir gatavi.
Pirms sāc: atver VS Code un izveido failu atgriesana.py. Noderēs 4.1 stundas funkcijas ar parametriem.
Teorija: Datu atgriešanas mehānisms
Funkcijas var veikt darbības (piemēram, izvadīt tekstu) un izrēķināt jaunu vērtību, ko atdod vietai, no kuras funkcija tika izsaukta. To dara ar atslēgvārdu return.
- Return statement (Atgriešanas komanda): Pārtrauc funkcijas darbību un nosūta rezultātu atpakaļ. Atšķirībā no
print(), kas datus tikai parāda ekrānā,returndatus nodod tālākai izmantošanai kodā.# Funkcija atgriež matemātisku rezultātu def saskaiti(a, b): return a + b - Saving returned values (Atgriezto vērtību saglabāšana): Kad izsaucam funkciju, kas atgriež vērtību, tās rezultāts parasti ir jāsaglabā Variable (Mainīgajā).
# Izsaucam funkciju un saglabājam rezultātu summa = saskaiti(10, 5) print(f"Rezultāts ir {summa}") - Multiple returns (Vairāku vērtību atgriešana): Python ļauj funkcijai atgriezt vairākas vērtības vienlaicīgi, atdalot tās ar komatiem. Tas izveido Tuple (Kortežu).
def uzdevuma_dati(): return "Kontroldarba bonuss", 100 nosaukums, punkti = uzdevuma_dati()
Praktiskie uzdevumi
1. uzdevums -
Salīdzini print un return
Beigās tu zināsi, kāpēc funkcija dažreiz izdrukā None.
- Ieraksti
def saskaiti_a(a, b):un zem tāprint(a + b). - Ieraksti
def saskaiti_b(a, b):un zem tāreturn a + b. - Ieraksti
rezultats_a = saskaiti_a(2, 3). - Ieraksti
rezultats_b = saskaiti_b(2, 3). - Izdrukā abus mainīgos un palaid.
- Pieraksti, kurš no tiem ir
Noneun kāpēc.
Gatavs, kad: rezultats_a ir None, bet rezultats_b ir 5.
2. uzdevums -
Uzraksti bonusa funkciju ar return
Beigās funkcija atdos skaitli, ko vari izmantot tālāk.
- Ieraksti
def dabut_bonusu(tips):. - Pievieno
if tips == "markieris":un zem tāreturn 15. - Pievieno
elif tips == "taimeris":un zem tāreturn 10. - Pievieno funkcijas beigās bez nosacījuma
return 5. - Ieraksti
mans_bonuss = dabut_bonusu("taimeris")un izdrukā to. - Izsauc funkciju ar vārdu
banansun pieraksti rezultātu.
Gatavs, kad: ar taimeris iznāk 10, bet ar nepazīstamu vārdu - 5, nevis None.
3. uzdevums -
Saliec divas funkcijas kopā vienā aprēķinā
Beigās vienas funkcijas rezultāts kļūs par otras ieejas datiem.
- Uzraksti funkciju
def gala_punkti(bazes, bonuss):, kas atgriež to summu. - Ieraksti
b = dabut_bonusu("markieris"). - Ieraksti
kopa = gala_punkti(100, b)un izdrukā rezultātu. - Pārraksti to vienā rindā:
kopa = gala_punkti(100, dabut_bonusu("markieris")). - Palaid un pārliecinies, ka rezultāts nav mainījies.
- Pievieno
returnvidū funkcijai vēl vienu rindu aiz tā un palaid. - Pieraksti vienu secinājumu: kas notiek ar kodu, kas rakstīts aiz
return.
Gatavs, kad: abi varianti dod 115, un tu zini, ka kods aiz return nekad neizpildās.
Papildu uzdevums - Atgriez divas vērtības
Ja pamatdarbs ir gatavs, liec funkcijai atdot uzreiz divus skaitļus.
- Uzraksti funkciju, kas atgriež
return punkti, bonuss. - Saņem abas vērtības ar
p, b = mana_funkcija(). - Izdrukā abas atsevišķi.
- Izdrukā arī
print(mana_funkcija())un apskati iekavu veidu. - Pieraksti, kā sauc datu tipu, ko funkcija patiesībā atdeva.
Gatavs, kad: abas vērtības nonāk atsevišķos mainīgajos, un tu zini, ka kopā tās ir tuple.
Biežākās kļūdas (un kā tās labot):
- None atgriešana (Missing return): Ja funkcijas beigās nav atslēgvārda
return, Python automātiski atgriežNone. Slikti, ja tālāk kodā mēģināsi veikt matemātiku arNonevērtību.# Slikti: Funkcija aprēķina, bet neko neatdod def saskaiti(a, b): rezultats = a + b # Labi: def saskaiti(a, b): return a + b - Unreachable code (Nesasniedzams kods): Tiklīdz Python izpilda
returnkomandu, funkcija beidzas. Viss, kas atrodas zemreturntajā pašā Indentation (Atkāpē), tiks ignorēts.# Slikti: print komanda nekad neizpildīsies def paziņot(): return True print("Funkcija pabeigta") # Labi: def paziņot(): print("Funkcija pabeigta") return True
Koda piemērs: Vērtību iegūšana un atdošana
# Funkcija klases rīka bonusa noteikšanai
def dabut_rika_bonusus(tips):
if tips == "markieris":
return 15
elif tips == "taimeris":
return 10
# Noklusējuma vērtība, ja neizpildās if/elif
return 5
# Saglabājam atgriezto vērtību jaunā mainīgajā
mans_bonuss = dabut_rika_bonusus("markieris")
print(f"Komanda iegūst {mans_bonuss} bonusa punktus!")