Tot zover hebben we een tweetal data structuren in Python laten zien: strings en lijsten. Elk ervan kent meerdere methoden, die een variant zijn op functies.
Zo is bijvoorbeeld reverse()
een methode bij een lijst. Zoals de naam suggereert draait deze methode de lijst om. Zo wordt bijvoorbeeld het eerste element van de lijst de laatste en omgekeerd). Je roept een methode aan door de punt (.
) structuur te gebruiken zoals bijvoorbeeld in:
«objectNaam».«methodeNaam»(«lijst met argumenten, mogelijk leeg»)
Ter vergelijking, de syntax die we eerder gezien hebben bij functies:
«functieNaam»(«lijst met argumenten, mogelijk leeg»)
Hier volgt een voorbeeld van een aanroep van de methode reverse
die werkt op een lijst.
Een voorbeeld van een methode met een argument is str.startswith
:
Veel methoden.
Hieronder zullen we de meest voorkomende methoden voor strings en lijsten noemen. Het gaat hierbij om taken die je ook zelf wel kunt schrijven, maar het gebruik van standaard methoden heeft het voordeel dat het je programma makkelijker leesbaar maakt om te lezen en ook makkelijker om je programma aan te passen.
Lijsten
De volgende methoden veranderen de lijst niet:
list.index(X)
: zoektX
in de lijst. In het bijzonder geeft het eeni
terug zodanig datlist[i]==X
terwijl het alle elementen doorzoekt. De kleinst mogelijkei
wordt teruggegeven. WanneerX
niet voorkomt in de lijst wordt er eenValueError
veroorzaakt.X in list
geeftTrue
terug wanneerX
een element van de lijst is, andersFalse
. Door hiervan gebruik te maken wordt eenValueError
vermeden. (Merk op datin
een operator is, geen methode.)
list.count(X)
: geeft terug het aantal keren datX
voorkomt in de lijst
De volgende methoden passen de lijst aan:
list.append(X)
voegtX
toe aan het van de lijstlist.insert(i, X)
voegtX
toe op positiei
list.extend(L)
voegt een lijstL
toe als elementen aan het eind van de lijstlist.remove(X)
verwijdert het eerste voorkomen vanX
list.pop(i)
verwijdert & geeft teruglist[i]
, terwijllist.pop()
verwijdert & geeft terug het laatste elementdel list[i]
verwijdert heti
-de element vanlist
(`merk op dat dit een "del
statement" is, geen methode)list.reverse()
keert de liist omlist.sort()
sorteert de lijst
in de lijst
Alle methoden, behalve pop
geven None
terug. Sommige van deze functies kunnen ook worden aangeroepen met iets andere argumenten; voor een compleet overzicht bekijk je de sectie lijst methoden in de Python documentatie. Bij lijsten kunnen "slices" (sublijsten) worden ingevoegd en verwijderd, vergelijkbaar met de string[x:y:z]
notatie die we in voorgaande lessen zijn tegengekomen.
Strings
Evenzo als bij lijsten, kun je in
, index
en count
ook gebruiken bij strings. Ze zijn zelfs sterker, omdat ze ook met substrings werken en niet alleen voor individuele karakters werken:
S in T
geeft een Boolean (True of False) wanneer stringS
een substring is van stringT
S.index(T)
geeft de eerste index vanS
waar de substringT
begintS.count(T)
geeft het aantal keren dat T niet overlappend voorkomt als substring vanS
Hier volgen een paar nuttige str
methoden:
- Over hoofdletters en kleine letters:
capitalize, lower, upper, islower, isupper
- Karakters (letters, cijfers en tekens):
isalpha, isdigit
- Uitlijnen:
center, ljust, rjust
;strip
verwijdert het uitlijnen - Substrings:
endswith, startswith, find, replace
- Parsing:
split, splitlines
We zullen ze, wanneer nodig, meer in detail introduceren . Een complete gedetailleerde lijst met string methoden staat in de Python documentatie.
Strings zijn onveranderbaar. We noemden reeds list.reverse()
die de volgorde van een lijst verandert door het om te keren, maar er bestaat geen str.reverse()
methode. Dat is vanwege het feit dat string objecten niet kunnen worden aangepast zodra ze gemaakt zijn. In les 17 zullen we er meer over vertellen.
Hier volgt een voorbeeld van een string methode: S.replace(old, new)
dat een veranderde versie van S
teruggeeft waarbij iedere substring van old
is vervangen door new
. Dit heeft een nieuwe string tot gevolg zonder dat de de oude wordt aangepast:
Bij de volgende oefening zijn de volgende methoden nuttig:
str.replace
, die we zojuist hebben besproken- de Boolse methode
str.isalpha()
dieTrue
teruggeeft wanneerstr
een string (of karakter) is die alleen bestaat uit letters - de Boolse methode
str.isdigit()
dieTrue
teruggeeft wanneerstr
een string (of karakter) is die alleen bestaat uit cijfers str.upper()
die een versie vanstr
teruggeeft in hoofdletters.
De rest van deze les is wat technisch van aard en bevat geen vereiste voorkennis voor de rest van de lessen. |
Meer over objecten
Wanneer je meer over Python leert, zul je nog meer soorten classes (klassen) tegenkomen dan strings en lijsten. Andere die je waarschijnlijk ook nuttig zult vinden zijn file (bestand) objecten , sets (verzamelingen), en dictionaires. Ze kennen allemaal vele nuttige methoden. Je kunt Python vragen naar alle methoden van een gegeven object door de dir
functie te gebruiken:
Kijken naar de eigenschappen van een object wordt ook wel introspection (introspectie) genoemd. In Python kunnen allerlei objecten methoden hebben:
Sommige elementen van dir
zijn member variabelen in plaats van methoden, zo is bijvoorbeeld int.denominator
een getal en geen functie. Technisch gezien, zijn in Python functies objecten, en zijn member functies speciale gevallen van member variabelen.
Je kunt ook introspectie toepassen op modules. Wanneer je import math
(math importeert) en daarna dir(math)
uitvoert, krijg je een lijst met alles uit de math
module, inclusief het getal pi
en de functie sqrt
.
Waarom objecten?
Waarom hebben we methoden zoals S.index(T)
in plaats van een eenvoudige functieaanroep index(S, T)
? Of anders gezegd waarom willen we überhaupt een object S
en de methode str.index()
?
De belangrijkste voordelen van objecten worden duidelijker naar mate je meer complexe en gevarieerde datatypen gebruikt bij het programmeren. Elk type object (bijv. de str
class) representeert zowel de onderliggende data die wordt opgeslagen (bijv. een rij karakters en zijn lengte) als het type operaties die er op kunnen worden uitgevoerd (bijv., het omzetten naar hoofdletters of het produceren van een substring). Een meer complex voorbeeld vormen de file objecten: ze representeren de naam van de file die kan worden geopend, de huidige positie in de file, en methoden om er in te schrijven en er uit te lezen. Je kunt zelfs je eigen datatypen definiëren!
Deze algemene aanpak wordt ook wel "object-oriented programming" (OOP) genoemd. Enige voordelen zijn:
- organisatie: Alles uit de
math
module kan worden gebruikt door middel van demath.«name»
syntax, waarmee wordt vermeden dat bestaande variabelen in je programma worden overschreven. - encapsulation: Zoals een programma tegelijkertijd kan werken met verschillende strings en files, kun je werken met vele verschillende kopieën (instances) van het data type gedefinieerd door een andere element uit een class.
- hergebruik: Wanneer je eenmaal een data type (zoals
str
) of een bibliotheek met methode (zoalsmath
) hebt, kun je het keer op keer gebruiken, of het delen met andere mensen. - debugging: Eerder zagen we dat door een functie te schrijven het hebben van vele kopieën van gelijksoortige code overbodig maakt, waardoor het debuggen gemakkelijker wordt. Functies verzamelen die samenhangen met een data type op een enkele plaats (de class definitie heeft hetzelfde effect.
- relaties tussen classes: Python weet dat de
index
methode het een kan betekenen voor een string maar iets anders voor lijst. Evenzo, kan Python niet alleen files lezen en schrijven op je computer, maar het kan ook data lezen en schrijven van het Internet. In beide gevallen (karakters of lijst elementen, en lokale files of die op afstand) de classes die er mee samenhangen kunnen op dezelfde manier worden gebruikt waarbij het concept overerving (inheritance) optreedt.
In de rest van de CS Circles lessen zulllen we alleen maar objecten en methoden gebruiken; je kunt later meer leren over het zelf maken van classes (kijk op de Resources pagina).
De volgende drie lessen kunnen in een willekeurige volgorde worden doorgewerkt. Ze vormen een scala aan uitdagingen waarin onderwerpen uit vroegere lessen gecombineerd aan de orde zullen komen.