0%

Hoofdstuk 2 · oefening

Meer expressieve functies

Nuttige standaardwaarden

Een goede standaardwaarde geeft een functie een bruikbare gebruikelijke keuze. Bekijk een functie die één vraag van een label voorziet:

def question_label(number, prefix):
    return f"{prefix} {number}"

Elke aanroeper moet dan beide waarden meegeven. Dat is handig wanneer elke keuze ertoe doet:

question_label(3, "Question")

Soms heeft één waarde een voor de hand liggende gebruikelijke keuze. De meeste labels kunnen het voorvoegsel "Question" gebruiken. Een standaardwaarde voor een parameter legt die gebruikelijke keuze vast in de functiedefinitie:

def question_label(number, prefix="Question"):
    return f"{prefix} {number}"

Nu zijn beide aanroepen geldig:

question_label(3)
question_label(3, "Challenge")

De eerste aanroep gebruikt "Question". De tweede vervangt de standaardwaarde door "Challenge".

Standaardwaarden drukken een gebruikelijke werkwijze uit

Een goede standaardwaarde is niet alleen handig. Ze laat zien wat de functie normaal doet. Aanroepers noemen alleen de afwijkende keuzes, zodat het gebruikelijke geval kort blijft.

Gebruik een standaardwaarde wanneer:

  • één keuze veilig is en geen verrassingen oplevert;

  • de meeste aanroepers die keuze moeten gebruiken;

  • aanroepers haar nog kunnen vervangen wanneer hun situatie anders is.

Verberg essentiële informatie niet achter een verzonnen standaardwaarde. Een labelfunctie heeft het werkelijke vraagnummer nog steeds nodig.

Verplichte parameters moeten vóór parameters met standaardwaarden staan:

def question_label(number, prefix="Question"):
    ...

Python wijst in dit voorbeeld een definitie af die een verplichte parameter na prefix plaatst.

Wat drukt dit af?

def greet(name, punctuation="!"):
    return f"Hello, {name}{punctuation}"


print(greet("Ada"))
print(greet("Ada", "."))

Voeg één nuttige standaardwaarde toe

De editor bevat een scoreopmaakfunctie. Geef label de standaardwaarde "Score" en geef daarna de opgemaakte tekst terug. De functie moet zowel met als zonder expliciet label werken.

Opdracht

Maak format_score af.

  • score en total moeten verplicht blijven.

  • label moet standaard "Score" zijn.

  • Geef tekst terug in de vorm Label: score/total.

Druk niets af binnen de functie. De meegeleverde aanroepen verzorgen de weergave.