0%

Zelf functies schrijven · oefening

Teruggeven is niet afdrukken

Afdrukken en teruggeven kunnen allebei een waarde zichtbaar maken terwijl je een programma test, maar ze doen verschillende taken.

  • print(value) toont tekst in de uitvoer.

  • return value stuurt een waarde terug naar de aanroeper.

Ze verwarren leidt tot een van de meest voorkomende fouten bij functies.

Een afgedrukte waarde wordt niet teruggegeven

Voer dit voorbeeld uit:

Try it

De eerste uitvoerregel komt uit de functie. De tweede eindigt op None.

Elke Python-functie geeft een waarde terug. Als de uitvoering het einde bereikt zonder expliciete return, geeft de functie de speciale waarde None terug. Onderweg iets afdrukken verandert dat niet.

Deze versie geeft de string terug:

Try it

Nu bevat result de string. De aanroeper kiest ervoor die te tonen.

Vraag wat de aanroeper nodig heeft

Gebruik print als de taak van de functie specifiek is om iets te tonen:

def show_count(items):
    print(f"Items stored: {len(items)}")

Gebruik return als de aanroeper de waarde voor een andere bewerking nodig heeft:

def count_message(items):
    return f"Items stored: {len(items)}"

Het teruggegeven bericht kan worden afgedrukt, opgeslagen, gecombineerd met andere tekst of gecontroleerd in een test.

Geen van beide versies is altijd de juiste. De verantwoordelijkheid van de functie bepaalt de keuze. Problemen ontstaan als de aanroeper een waarde verwacht van een functie die alleen afdrukt.

Een nuttige vraag bij het debuggen

Als je None ziet waar je een resultaat verwachtte, bekijk dan de functie:

  1. Bereikt ze een expliciete return?

  2. Drukt ze de waarde alleen af?

  3. Heb je return per ongeluk in een tak gezet die niet werd uitgevoerd?

Met die korte controle los je veel beginnersfouten bij functies op.

Je wilt een prijs berekenen, opslaan in total en vergelijken met een budget. Wat moet calculate_total doen?

Opdracht

De huidige build_summary drukt het bericht af. Daardoor ontvangt summary de waarde None en drukt het programma een ongewenste tweede regel af.

Verander de functie zodat ze de samenvattende string teruggeeft. Behoud de toewijzing en de laatste aanroep van print.

Verwachte uitvoer:

Lisbon for 4 days

De functie moet ook met andere argumenten werken. Leg de voorbeeldtekst niet als vaste uitkomst vast.