Zelf functies schrijven · oefening
Lokale variabelen en bereik
Een functie creëert een kleine werkruimte voor haar variabelen. Een variabele die binnen een functie een waarde krijgt, is normaal gesproken lokaal voor die functie.
Het bereik van een naam, ook wel de scope, is het deel van het programma waar die naam beschikbaar is.
def make_status(place):
message = f"Trip to {place}"
return message
Zowel place als message zijn lokale namen. Ze zijn beschikbaar terwijl make_status wordt uitgevoerd. Na afloop van de aanroep kan de teruggegeven string blijven bestaan, maar zijn die lokale namen niet meer beschikbaar voor de aanroeper.
current = make_status("Seoul")
print(current) # Trip to Seoul
print(message) # NameError
current ontvangt de waarde. De variabele ontvangt niet de lokale variabele zelf.
Dezelfde naam kan in verschillende bereiken bestaan
Zichtbaar bewijs werkt beter dan een regel uit je hoofd leren:
De toewijzing binnen make_status maakt een lokale status. Ze vervangt de status op het hoogste niveau niet.
De uitvoer laat zien dat er twee afzonderlijke namen zijn:
Inside: Trip to Seoul
Returned: Trip to Seoul
Outside: Not started

Wanneer de aanroep eindigt, verdwijnt de lokale status. De status op het hoogste niveau is nog steeds "Not started". In de figuur betekent “Outside function” buiten de functie en “Function scope” het bereik binnen de functie. “Return value” is de teruggegeven waarde; “Same name, separate scopes” benadrukt dat dezelfde naam in afzonderlijke bereiken bestaat.
Parameters zijn ook lokaal
In deze functie wordt place voor elke aanroep aangemaakt:
def make_status(place):
status = f"Trip to {place}"
return status
Bij de aanroep make_status("Seoul") krijgt de lokale parameter place de waarde "Seoul". Een latere aanroep met "Lagos" krijgt een eigen uitvoering en eigen lokale waarden.
Die afzondering is handig. Een functie kan duidelijke tijdelijke namen gebruiken zonder de rest van het programma ermee te vullen.
Geef informatie mee en geef resultaten terug
Gebruik voorlopig dit betrouwbare patroon:
def make_status(place):
status = f"Trip to {place}"
return status
current = make_status("Seoul")
Parameters geven de benodigde informatie door aan de functie.
Lokale variabelen bewaren tussenresultaten.
returngeeft een resultaat terug.
Python biedt manieren om namen buiten een functie te benaderen en te wijzigen, maar een beginnersprogramma is meestal makkelijker te begrijpen als informatie de grens expliciet oversteekt.
Wat is de laatste regel die dit programma afdrukt?
label = "OUTSIDE"
def make_label():
label = "INSIDE"
return label
result = make_label()
print(result)
print(label)
Opdracht
Maak make_status(place) af.
Binnen de functie:
maak een lokale variabele met de naam
status;geef die de waarde
Trip togevolgd doorplace;geef die lokale waarde terug.
Wijzig de status op het hoogste niveau niet.
Verwachte uitvoer:
Trip to Seoul
Not started
Gebruik na een geslaagde controle Step in de oefeneditor. Kijk hoe de lokale status tijdens de aanroep verschijnt. Kijk na return hoe current_status de waarde ontvangt terwijl de status buiten de functie ongewijzigd blijft.