Module 4: Functies en modules

Module 4: Functies en modules

Leerdoel

  • Wat zijn functies
  • Functie namen
  • Functie parameters
  • Functie retourwaardes
  • Details van type casting functies float(), int(), en str()
  • Basis berekeningen met abs(), max(), min(), pow(), en round()
  • len()
  • input()
  • type()
  • Details van de print() functie
  • Wat modules zijn
  • De math functies exp(), log(), log10(), en sqrt()
  • De random functies random(), randint()

4.1 Functies

In de voorgaande hoofdstukken is er al gesproken over een aantal basis “functies,” zoals print() en int(). In dit hoofdstuk worden deze functies in meer detail besproken, en worden een aantal nieuwe functies geïntroduceerd die nuttig gaan zijn in de volgende hoofdstukken.

Een functie is een blok herbruikbare code dat een bepaalde actie uitvoert. Om een functie aan het werk te zetten, roep je hem aan (Engels: “call”), met de parameters als de functie die nodig heeft. Je hoeft niet te weten hoe de functie precies werkt. Je hoeft slechts drie dingen te weten:

  • De naam van de functie
  • De parameters die de functie nodig heeft (als die er zijn)
  • De waarde die de functie teruggeeft (als er zo’n waarde is)

4.1.1 Functienamen

Iedere functie heeft een naam. Net als variabele namen, mogen functie namen alleen bestaan uit letters, cijfers, en underscores, en mogen ze niet starten met een cijfer. Vrijwel alle standaard Python functies bestaan alleen uit kleine letters. Gewoonlijk is de naam van een functie een korte beschrijving van wat de functie doet.

Als je in een tekst refereert aan een functie, is het de gewoonte dat je achter de naam van de functie een openings- en sluithaakje zet, omdat functies in code altijd die haakjes hebben (zelfs al staat er niks tussen de haakjes).

4.1.2 Parameters

Sommige functies worden aangeroepen met parameters (“argumenten”), die meestal verplicht zijn. De parameters worden geplaatst tussen de haakjes die achter de functienaam staan. Als er meerdere parameters zijn, moet je er komma’s tussen zetten.

De parameters zijn de waardes die de programmeur aan de functie geeft om te verwerken. Bijvoorbeeld, de functie int() wordt aangeroepen met één parameter, namelijk de waarde waarvan de functie probeert een integer representatie te maken. De print() functie mag worden aangeroepen met een willekeurig aantal parameters (zelfs nul), die de functie op het scherm zal tonen, waarna de functie naar een nieuwe regel op het scherm zal gaan.

Over het algemeen is het zo dat een functie de waardes van de parameters niet kan wijzigen. Bekijk bijvoorbeeld de volgende code:

Als je deze code uitvoert, zie je dat int() niet de waarde van x heeft aangepast; de functie heeft alleen aan print() doorgegeven wat de integer representatie van de waarde van x is. De reden dat dit zo is, is dat over het algemeen alleen de waarde van parameters wordt doorgegeven (Engels: “passed by value”).

Dit betekent dat de functie geen toegang heeft tot de variabelen die als parameters gebruikt worden, maar dat de functie kopieën krijgt van de waardes die in de parameters staan. Ik zeg “over het algemeen” omdat dit niet geldt voor alle datatypes, maar het geldt in ieder geval voor de datatypes die tot op dit moment behandeld zijn.

Als een functie meerdere parameters krijgt, maakt de volgorde uit. Bijvoorbeeld, de standaard functie pow() krijgt twee parameters, en rekent de waarde uit van de eerste die wordt verheven tot de macht weergegeven door de tweede.

De namen die aan de variabelen zijn gegeven doen niet ter zake, de eerste wordt verheven tot de macht die de tweede is. Dus de volgende code geeft een ander antwoord dan de vorige, omdat de variabelen in een andere (nogal verwarrende) volgorde aan de functie worden doorgegeven.

Wat gebeurt er als je een functie aanroept met parameter waardes waarmee de functie niet kan werken? Bijvoorbeeld, wat gebeurt er als ik int() aanroep met een string die geen integer bevat, of pow() met strings in plaats van getallen? Dat leidt meestal tot "runtime errors" (fouten tijdens de uitvoering van code). Bijvoorbeeld, beide regels in de volgende code leiden tot runtime errors.

4.1.3 Retourwaarde

Een functie heeft vaak een retourwaarde. Als een functie een waarde retourneert, kun je die in je code gebruiken. Bijvoorbeeld, de int() functie retourneert een integer representatie van de parameter die is meegegeven. Je kunt deze retour waarde in een variabele stoppen middels een assignment (toewijzing), of je kunt de waarde op een andere manier gebruiken, bijvoorbeeld deze onmiddellijk printen. Je kunt er zelfs voor kiezen niks met de waarde te doen, maar in dat geval had het waarschijnlijk weinig zin om de functie aan te roepen.

Niet alle functies retourneren een waarde. Bijvoorbeeld, print() geeft geen waarde terug. Als je niet uitkijkt, kan dit tot vreemd gedrag van je code leiden. Voer maar eens de volgende code uit:

print( print( "Hello, world!" ) )

Je ziet dat deze code twee regels print. De eerste bevat de tekst Hello, world! en de tweede het woord None

Wat betekent dat woord None?

None is een speciale waarde die aangeeft “geen waarde.” Als je None probeert af te drukken, drukt Python het woord “None” af, maar dat is niet een string met de waarde "None". Het woord geeft slechts aan dat er niks af te drukken was. None is niet hetzelfde als een lege string (""). Een lege string heeft nog steeds een waarde, namelijk een string met lengte nul. None is geen string, geen float, geen integer, niks. Dus wees voorzichtig met het aanroepen van een functie als parameter; als de functie geen retour waarde heeft, kunnen er vreemde dingen gebeuren.

4.1.4 Functies

Type casting functies

float()

float() heeft één parameter en retourneert een floating-point representatie van de waarde van de parameter. Als de waarde een integer is, krijg je dezelfde waarde terug als float. Als de parameter een float is, krijg je dezelfde waarde terug. Als de parameter een string bevat die je als integer of float zou kunnen interpreteren, dan krijg je die float terug als waarde. Anders krijg je een runtime error.

int()

int() heeft één parameter en retourneert een integer representatie van de waarde van de parameter. Als de waarde een integer is, krijg je dezelfde waarde terug. Als de waarde een float is, krijg je een integer terug die de waarde van de float naar beneden heeft afgerond. Als de parameter een string bevat die je als integer zou kunnen interpreteren, dan krijg je die integer terug als waarde. Anders krijg je een runtime error.

str()

str() heeft één parameter en retourneert een string representatie van de waarde van de parameter.

Basis berekeningen

Een paar basis Python functies helpen met berekeningen. Een deel ken je al maar er bestaan er nog veel meer.

abs()

abs() krijgt een numerieke parameter waarde. Als de waarde positief is, wordt hij weer geretourneerd. Als de waarde negatief is, wordt de waarde vermenigvuldigd met -1 geretourneerd.

max()

max() krijgt twee of meer numerieke parameters en retourneert de grootste.

min()

min() krijgt twee of meer numerieke parameters en retourneert de kleinste.

pow()

pow() krijgt twee numerieke parameters en retourneert de eerste verheven tot de macht weergeven door de tweede. Optioneel mag je een derde parameter meegeven, die een integer moet zijn. Als je dat doet, krijg je de waarde modulo de derde parameter terug.

round()

round() krijgt een numerieke parameter die wiskundig wordt afgerond. Optioneel mag je als tweede parameter een integer meegeven die aangeeft hoeveel cijfers achter de komma behouden moeten worden. Als de tweede parameter niet wordt meegegeven, wordt afgerond op gehele getallen.

round(<parameter> , <aantal decimalen>)

Dit voorbeeld illustreert het gebruik hiervan. Onderstaande code zal het getal 3.14159 afgerond naar 2 decimalen weergeven.

Andere functies

input()

input() krijgt één parameter mee, namelijk een string. Deze string is de zogeheten “prompt.” Als input() wordt aangeroepen, wordt de prompt op het scherm gezet en mag de gebruiker een tekst ingeven. De gebruiker mag ingeven wat hij of zij wil, inclusief niks. De gebruiker sluit het ingeven af met een druk op de Enter toets. De retour waarde van de functie is hetgeen de gebruiker heeft ingegeven, exclusief de Enter.

len()

len() is een basis functie die één parameter krijgt, en die de lengte van die parameter teruggeeft. Op dit moment is het enig zinvolle datatype dat je mee kunt geven aan len() een string, waarvan je dan de lengte krijgt. In latere hoofdstukken volgen meer datatypes waarvan je de lengte kunt bepalen.

Dit voorbeeld illustreert het gebruik hiervan.

In dit programma wordt de ingevoerde string opgeslagen in de variabele input_string. Vervolgens wordt de len() functie gebruikt om de lengte van deze string te berekenen, en wordt het resultaat opgeslagen in de variabele lengte. Dit resultaat wordt weergegeven in je output.

type()

type() wordt gebruikt om het datatype van een object te achterhalen. Het retourneert het datatype van het opgegeven object als een resultaat.

Dit voorbeeld illustreert het gebruik hiervan.

In dit voorbeeld worden drie variabelen gedefinieerd: getal, getal_met_komma, en woord. Vervolgens wordt de functie type() gebruikt om het datatype van elk van deze variabelen te achterhalen.

print()

print() krijgt nul of meer parameters mee en toont ze op het scherm.

print() kan twee speciale parameters meekrijgen, die sep en end heten.

  • sepgeeft aan wat er getoond moet worden tussen iedere twee parameters, en is als default een spatie. Je kunt die spatie wijzigen in iets anders via sep, inclusief in een lege string.
  • endgeeft aan wat print() moet tonen nadat alle parameters zijn getoond, en is als default een “nieuwe regel.” Door endte wijzigen kun je ervoor zorgen dat print() iets anders doet dan naar een nieuwe regel gaan als hij klaar is met het tonen van parameters.

Om sepen endte gebruiken, moet je speciale parameters opnemen, namelijk parameters sep=<string> en/of end=<string> (merk op: als in een beschrijving van code je iets ziet dat tussen < en > staat, betekent dat meestal dat je dat niet letterlijk moet typen, maar moet vervangen door van wat de term tussen de < en > aangeeft, dus <string> betekent dat je daar een string moet plaatsen).

Dit voorbeeld illustreert het gebruik hiervan.

Als je deze code uitvoert, zie je twee regels. De eerste bevat “XxXxX,” aangezien er is aangegeven dat er drie keer een hoofdletter “X” afgedrukt moet worden met tussen iedere twee als separator een kleine letter “x.” De tweede regel bevat “XYZ”, omdat weliswaar dit drie verschillende aanroepen van print() betreft, maar na ieder van de eerste twee er niet naar een volgende regel wordt gegaan.

4.1.5 Vaardigheid

Ga naar je cursus in Dodona en maak de volgende oefening(en).

  • De schrijnwerkerij
  • Middencirkel
  • Fahrenheit
  • Brandstofverbruik
  • Gratis verzending deel 3

Ga naar Dodona

4.2 Modules

Python biedt basis functies, waarvan er een aantal hierboven besproken zijn. Naast die basis functies biedt Python ook een groot aantal zogeheten “modules,” waarin zich vele nuttige functies bevinden. Om de functies van een module te gebruiken in een programma, moet je de juiste module importeren door boven in je programma import <modulenaam> op te nemen. Je kunt dan alle functies die in de betreffende module staan in je programma gebruiken, maar je moet de functie-aanroepen vooraf laten gaan door de naam van de module en een punt. Bijvoorbeeld, om de functie sqrt() uit de math module (die de wortel van een getal trekt) te gebruiken, roep je math.sqrt() aan nadat je mathgeïmporteerd hebt.

Als alternatief kun je ook specifieke functies vanuit een module importeren, via:

from <module> import <functie1>, <functie2>, <functie3>, ...

Het voordeel van een dergelijke manier van functies importeren is dat je in je code niet de naam van de module voor de functie-aanroep hoeft te zetten.

Bijvoorbeeld:

is equivalent aan:

Als je een functie onder een andere naam in je programma wilt gebruiken, kun je dat doen middels het gereserveerde woord as. Dit kan zinvol zijn als je meerdere modules gebruikt waarin toevallig functies voorkomen die dezelfde naam hebben.

 

Functies uit twee veelgebruikte standaard modules

Er zijn veel meer standaard modules naast de modules hieronder vernoemd, en sommige ervan komen later nog aan de orde. Andere zul je zelf moeten opzoeken als je ze nodig hebt. Je mag er echter van uitgaan dat voor ieder min-of-meer-algemeen probleem dat je wilt oplossen, er iemand is geweest die er een module voor ontwikkeld heeft die het eenvoudig of zelfs triviaal maakt om het probleem op te lossen. Dus in de praktijk geldt: ga niet meteen zelf coderen, maar zoek eerst even uit of je niet gebruik kunt maken van de moeite die iemand anders gedaan heeft.

math

De math module bevat een aantal nuttige wiskundige functies. Deze functies zijn meestal zeer efficiënt, en retourneren meestal een float. Hier zijn een klein aantal van de functies; als je er meer wilt kennen kun je ze opzoeken in de Python referentie:

  • exp() krijgt één numerieke parameter en retourneert e tot de macht van die parameter. Als je niet weet wat e is: e is een speciaal getal met veel interessante eigenschappen, en wordt veel gebruikt in natuurkunde, wiskunde, en statistiek.
  • log() krijgt één numerieke parameter en retourneert het natuurlijk logaritme van die parameter. Het natuurlijk logaritme is de waarde die de parameter als uitkomst heeft als je e verheft tot deze waarde. Net als e heeft het natuurlijk logaritme toepassingen in natuurkunde, wiskunde, en statistiek.
  • ceil() heeft één numerieke parameter en geeft als return value de kleinste integer die groter of gelijk is aan de parameter. Met andere woorden rondt deze functie de waarde van de parameter naar boven af tot op een geheel getal.
  • floor() heeft één numerieke parameter en geeft als return value de grootste integer die kleiner is dan de parameter. Met andere woorden rondt deze functie de waarde van de parameter naar beneden af tot op een geheel getal.
  • sqrt() krijgt één numerieke parameter en retourneert de vierkantswortel van die parameter.

Bijvoorbeeld:

random

De random module bevat functies die pseudo-toevalsgetallen genereren. Ik zeg “pseudo-toevalsgetallen” en niet “toevalsgetallen,” aangezien het onmogelijk is voor digitale computers om echt toevalsgetallen te genereren. Maar voor alle toepassingen mag je ervan uitgaan dat deze module toevalsgetallen genereert.

  • random() krijgt geen parameters, en retourneert een toevalsgetal als een float binnen het bereik tussen nul en 1, waarbij 0.0 wel meedoet maar 1.0 niet.

Voorbeeld

Dit retourneert een float getal tussen 0.0 en 0.9999, elk met een gelijke kans.

  • randint() krijgt twee parameters, beide integers, waarbij de eerste kleiner dan of gelijk aan de tweede moet zijn. Het retourneert een toevalsgetal dat een integer is dat ligt binnen het bereik dat begrensd wordt door deze twee parameters, inclusief beide parameters.

Voorbeeld

Dit retourneert 2, 3, 4, of 5 elk met een gelijke kans.

4.2.3 Vaardigheid

Ga naar je cursus in Dodona en maak de volgende oefening(en).

  • Straal voetbal
  • Bureau van Pythagoras
  • Grenswaarden
  • Behangpapier
  • Koeriersbedrijf
  • Ruit
  • Dodentocht

Ga naar Dodona

  • Het arrangement Module 4: Functies en modules is gemaakt met Wikiwijs van Kennisnet. Wikiwijs is hét onderwijsplatform waar je leermiddelen zoekt, maakt en deelt.

    Auteur
    Katleen Trio
    Laatst gewijzigd
    2024-12-08 10:03:33
    Licentie

    Dit lesmateriaal is gepubliceerd onder de Creative Commons Naamsvermelding-GelijkDelen 4.0 Internationale licentie. Dit houdt in dat je onder de voorwaarde van naamsvermelding en publicatie onder dezelfde licentie vrij bent om:

    • het werk te delen - te kopiëren, te verspreiden en door te geven via elk medium of bestandsformaat
    • het werk te bewerken - te remixen, te veranderen en afgeleide werken te maken
    • voor alle doeleinden, inclusief commerciële doeleinden.

    Meer informatie over de CC Naamsvermelding-GelijkDelen 4.0 Internationale licentie.

    Aanvullende informatie over dit lesmateriaal

    Van dit lesmateriaal is de volgende aanvullende informatie beschikbaar:

    Toelichting
    De basisvaardigheden van programmeren met Python.
    Eindgebruiker
    leerling/student
    Moeilijkheidsgraad
    gemiddeld

    Bronnen

    Bron Type
    Ga naar Dodona
    https://dodona.be/nl/courses/?tab=my
    Link
    Ga naar Dodona
    https://dodona.be/nl/courses/?tab=my
    Link
  • Downloaden

    Het volledige arrangement is in de onderstaande formaten te downloaden.

    Metadata

    LTI

    Leeromgevingen die gebruik maken van LTI kunnen Wikiwijs arrangementen en toetsen afspelen en resultaten terugkoppelen. Hiervoor moet de leeromgeving wel bij Wikiwijs aangemeld zijn. Wil je gebruik maken van de LTI koppeling? Meld je aan via info@wikiwijs.nl met het verzoek om een LTI koppeling aan te gaan.

    Maak je al gebruik van LTI? Gebruik dan de onderstaande Launch URL’s.

    Arrangement

    IMSCC package

    Wil je de Launch URL’s niet los kopiëren, maar in één keer downloaden? Download dan de IMSCC package.

    Voor developers

    Wikiwijs lesmateriaal kan worden gebruikt in een externe leeromgeving. Er kunnen koppelingen worden gemaakt en het lesmateriaal kan op verschillende manieren worden geëxporteerd. Meer informatie hierover kun je vinden op onze Developers Wiki.