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 valuestuurt 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:
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:
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:
Bereikt ze een expliciete
return?Drukt ze de waarde alleen af?
Heb je
returnper 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.