ebSkola

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.

2.4.15. Veido modulāras programmas un funkcijas.

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ā, return datus 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.

  1. Ieraksti def saskaiti_a(a, b): un zem tā print(a + b).
  2. Ieraksti def saskaiti_b(a, b): un zem tā return a + b.
  3. Ieraksti rezultats_a = saskaiti_a(2, 3).
  4. Ieraksti rezultats_b = saskaiti_b(2, 3).
  5. Izdrukā abus mainīgos un palaid.
  6. Pieraksti, kurš no tiem ir None un 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.

  1. Ieraksti def dabut_bonusu(tips):.
  2. Pievieno if tips == "markieris": un zem tā return 15.
  3. Pievieno elif tips == "taimeris": un zem tā return 10.
  4. Pievieno funkcijas beigās bez nosacījuma return 5.
  5. Ieraksti mans_bonuss = dabut_bonusu("taimeris") un izdrukā to.
  6. Izsauc funkciju ar vārdu banans un 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.

  1. Uzraksti funkciju def gala_punkti(bazes, bonuss):, kas atgriež to summu.
  2. Ieraksti b = dabut_bonusu("markieris").
  3. Ieraksti kopa = gala_punkti(100, b) un izdrukā rezultātu.
  4. Pārraksti to vienā rindā: kopa = gala_punkti(100, dabut_bonusu("markieris")).
  5. Palaid un pārliecinies, ka rezultāts nav mainījies.
  6. Pievieno return vidū funkcijai vēl vienu rindu aiz tā un palaid.
  7. 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.

  1. Uzraksti funkciju, kas atgriež return punkti, bonuss.
  2. Saņem abas vērtības ar p, b = mana_funkcija().
  3. Izdrukā abas atsevišķi.
  4. Izdrukā arī print(mana_funkcija()) un apskati iekavu veidu.
  5. 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 ar None vē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 return komandu, funkcija beidzas. Viss, kas atrodas zem return tajā 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!")
Komanda iegūst 15 bonusa punktus!