0%

Meer expressieve functies · oefening

Positionele argumenten en keywordargumenten

De vorige les gaf een parameter een standaardwaarde. Daardoor werd deze kortere aanroep mogelijk:

format_score(7, 10)

Python moet nog steeds weten welke waarde bij welke parameter hoort. Deze les bekijkt de twee manieren waarop we dat verband kunnen leggen.

Bekijk een functie die één quizpoging beschrijft:

def describe_attempt(learner, score, total, status="complete"):
    ...

De namen learner, score, total en status zijn parameters. Ze horen bij de functiedefinitie. Wanneer we de functie aanroepen, heten de waarden die we meegeven argumenten.

Laat de volgorde de betekenis dragen

In deze aanroep hebben de argumenten geen naam:

describe_attempt("Mina", 8, 10)

Python gebruikt hun posities. De eerste waarde, "Mina", hoort bij de eerste parameter, learner. De volgende twee waarden worden score en total. Argumenten die zo worden meegegeven, heten positionele argumenten.

Dit werkt goed wanneer er maar een paar waarden zijn en hun betekenis makkelijk te herkennen is. Nog een string toevoegen maakt de aanroep minder duidelijk:

describe_attempt("Mina", 8, 10, "needs review")

De code werkt, maar een lezer moet mogelijk terug naar de functiedefinitie om te ontdekken wat "needs review" betekent.

Benoem een argument op de plek van de aanroep

We kunnen de parameternaam samen met de waarde schrijven:

describe_attempt("Mina", 8, 10, status="needs review")

Door status= te schrijven, wordt het doel van de laatste string zichtbaar precies waar de functie wordt aangeroepen. Dit is een keywordargument.

We kunnen ook elk argument benoemen:

describe_attempt(
    learner="Mina",
    score=8,
    total=10,
    status="needs review",
)

Beide stijlen roepen dezelfde functie aan. Positionele argumenten houden korte, bekende aanroepen compact. Keywordargumenten zijn handig voor optionele keuzes en voor waarden waarvan het doel anders moeilijk te raden is.

Wanneer een aanroep de twee stijlen mengt, moeten positionele argumenten eerst komen. Na het eerste keywordargument moet elk volgend argument ook worden benoemd.

Welke aanroep verandert het duidelijkst alleen de optionele status?

Probeer beide stijlen

De functie in de editor is al compleet. Bouw een lijst met de naam reports met twee aanroepen, zodat je kunt oefenen met de keuze hoe elk argument wordt meegegeven:

  1. Gebruik positionele argumenten voor Mina’s naam, score en totaal. Laat de standaardstatus gelden.

  2. Geef Noah’s naam positioneel mee en gebruik daarna keywordargumenten voor score, total en status.

De eerste aanroep gebruikt de standaardwaarde uit de vorige les. De tweede maakt Noah’s afwijkende status zichtbaar door die te benoemen.

Opdracht

Vervang de lege lijst reports door twee aanroepen van describe_attempt.

  • Mina behaalde 8 van de 10 punten. Laat de standaardstatus gelden.

  • Noah behaalde 6 van de 10 punten en heeft de status "needs review".

  • Geef voor Noah score, total en status als keywordargumenten mee.

Behoud de meegeleverde lus die elk rapport afdrukt.