We hebben al kennis gemaakt met een functie, namelijk
, een functie die iets afdrukt. Om een functie te laten werken gebruik je haar naam, gevolgd door een aantal argumenten die tussen haakjes (print
()
) staan. Dat heet een functie-oproep. Dan doet de functie iets waarbij de argumenten een rol spelen. Wanneer er meerdere argumenten zijn worden ze gescheiden door komma's (,
). Je kunt bijvoorbeeld meerdere argumenten geven aan
; het zal al de argumenten, met spaties ertussen, in die volgorde afdrukken. We laten dit zien in het voorbeeld hieronder.print
De extra spaties in het programma hierboven hebben geen effect op de uitvoer. Extra spaties hebben ook geen betekenis in de meeste andere situaties. Ze hebben enkel betekenis op twee plaatsen: in een stuk tekst tussen aanhalingstekens, en aan het begin van een regel. Dit laatste heet inspringing (Eng.: indentation). Inspringing kan fouten veroorzaken (klik hier voor een voorbeeld) wanneer het niet correct wordt gebruikt. Over een paar lessen zul je voorbeelden zien van correct inspringen. |
Er zijn twee mogelijke redenen om een functie op te roepen: omwille van haar neveneffecten of omwille van haar resultaatwaarde. De functie print
is een voorbeeld van het eerste geval: je roept haar op omdat ze tekst afdrukt; tekst afdrukken is een voorbeeld van een neveneffect. Een voorbeeld van het tweede geval is de functie max
: die drukt niets af en heeft ook geen andere neveneffecten. Het heeft dan ook geen zin haar op te roepen zonder meer: zo'n programma doet niets. Zo'n functie is enkel nuttig als je haar gebruikt op een plaats in het programma waar je normaal gezien een waarde zou schrijven, zoals bv. rechts van het gelijkteken in een toekenning, of als argument van een oproep van een andere functie. Als je dat doet, zal de resultaatwaarde van de functie-oproep (ook terugkeerwaarde (Eng.: return value) genoemd) gebruikt worden als toegekende waarde of argument voor de andere oproep. Als je de functie max
oproept, is de resultaatwaarde de waarde van het grootste meegegeven argument. We zeggen dat max
haar grootste argument teruggeeft.
max(42, 17)
dat "de functie de waarde 42
teruggeeft".
De functie max
heeft een tegenhanger: de functie min
. Die geeft het minimum (kleinste) van al haar argumenten terug.
x = 13
y = 7
a = max(x+y, x*2)
b = min(x, y)
print(a, b)
Functie-oproepen kunnen worden gecombineerd tot meer complexe uitdrukkingen.
x = min(max(13, 7), 9)
print(x)
Je hoeft je niet te beperken tot het gebruik van functies die in Python vooraf gedefinieerd zijn. Over een paar lessen zul je leren hoe je nieuwe functies kunt definiëren!
Veel voorkomende fouten
Wanneer je een functie aanroept met te weinig of te veel argumenten dan krijg je een foutmelding. Bijvoorbeeld, max
vereist tenminste één argument:
Het is belangrijk om zorgvuldig de foutmeldingen te lezen, wanneer je programma niet werkt. Python zal doorgaans bruikbare feedback geven over wat er mis ging. Soms is de foutmelding echter enigszins misleidend en moet je wat verder kijken om de oorzaak van het probleem te ontdekken. Hier volgt een voorbeeld.
Python zegt dat er een syntax error optreedt, wat zoveel betekent als: ik begrijp niet wat je bedoelt.
Traceback (most recent call last): In line 2 of the code you submitted: bigger = max(3, 4) ^ SyntaxError: invalid syntaxDe regel
bigger = max(3, 4)
is echter juist. Het probleem komt voort uit de vorige regel: we hebben daar het sluithaakje )
vergeten na smaller = min(14, 99
en Python begon op de volgende regel te zoeken naar )
. Dus, kijk ook voor en na de regel die Python noemt, wanneer je vast komt te zitten bij het debuggen van je programma.
Oefening
Dit is een tweedelige oefening waarin gebruik gemaakt wordt van de functies min
en max
. Er zijn verbindingen tussen de steden Maxime en Miniac door middel van meerdere bruggen. Over elke brug kan een begrensde hoeveelheid lading getransporteerd worden.
Oefening: Klik en sleep
Hier volgt een klik-en-sleep-oefening waarbij de regels in een correcte volgorde versleept dienen te worden.
Wanneer je de oefeningen hierboven af hebt, heb je twee keuzes: