0%

Wat Python eigenlijk is

Python is meer dan één ding

“Python is traag.”

Die uitspraak zul je horen. Je zult ook horen dat Python geweldig is om met gegevens te werken. Beide worden met veel overtuiging herhaald, maar je kunt geen van beide beoordelen voordat je vraagt welke Python de spreker bedoelt.

Die naam verwijst namelijk naar vier verschillende dingen.

Vier dingen achter één naam

In de vorige les zag je een programma en het totaal dat het berekent, of je nu op Run klikte of niet. Om het uit te voeren zijn de regels van de taal nodig en software die die regels volgt. Grotere programma’s kunnen daarnaast hulpmiddelen uit de standaardbibliotheek en pakketten van derden gebruiken. Het schema onderscheidt die vier lagen: taal (Language), implementatie (Implementation), standaardbibliotheek (Standard library) en het ecosysteem van derden (Third-party ecosystem). Dat betekent niet dat elk programma alle vier nodig heeft.

Het schema toont een Python-programma in vier rijen. Het programma volgt de taal: de gedeelde regels en betekenissen. Een implementatie voert het uit, bijvoorbeeld CPython. Het kan hulpmiddelen uit de standaardbibliotheek gebruiken die met de implementatie worden meegeleverd, en pakketten van derden die apart worden toegevoegd.

De Python-taal is de gedeelde verzameling regels die een stuk tekst tot een Python-programma maakt: hoe instructies worden gegroepeerd en wat bepaalde woorden en tekens betekenen. Het is een afspraak over betekenis, niet iets wat je kunt installeren.

Een implementatie is software die die regels volgt en het programma echt uitvoert. CPython is de oorspronkelijke implementatie, de actiefst onderhouden en verreweg de meest gebruikte. Dit is wat mensen krijgen als ze Python downloaden van Python.org. Er bestaan andere implementaties voor andere omgevingen en met andere afwegingen. De uitvoeromgeving in de browser op deze site gebruikt Pyodide, dat CPython geschikt maakt om in een browser te draaien. Daarom kun je het voorbeeld uit de vorige les uitvoeren zonder zelf Python te installeren.

De standaardbibliotheek is de verzameling kant-en-klare hulpmiddelen die met een implementatie wordt meegeleverd. Elk onderdeel is een module: een herbruikbaar stuk code voor een bepaald soort werk, zoals datums, tekst, bestanden, internetverzoeken of testen. Die onderdelen zitten er al bij, zodat niemand ze opnieuw hoeft te bouwen.

Een pakket van derden is een uitbreiding die niet standaard wordt meegeleverd, maar door iemand anders wordt gemaakt en verspreid. pandas voor gegevensverwerking, Django voor webapplicaties en nog enkele honderdduizenden andere. Die eerste twee namen hoef je niet te onthouden. Samen met de mensen die ze onderhouden vormen de pakketten het ecosysteem van Python, en dat is veel groter dan de standaardbibliotheek.

Veel programma’s gebruiken alle vier de lagen. De tekst volgt de taal, een implementatie voert die uit en onderweg kan het programma modules uit de standaardbibliotheek en geïnstalleerde pakketten aanroepen. Het voorbeeld met de rekeningen gebruikt alleen ingebouwde bewerkingen: voor de berekening importeert het geen module en heeft het geen pakket van derden nodig.

Nu kunnen we die twee uitspraken beoordelen

Terug naar “Python is traag.” Waar is het traag? In het ontwerp van de taal, in de manier waarop een bepaalde implementatie code uitvoert, in een slecht geschreven programma of in een pakket dat zware berekeningen doet? Dat zijn vier verschillende beweringen, en drie ervan gaan helemaal niet over de taal.

“Python is uitstekend voor gegevensanalyse” kun je op dezelfde manier ontleden. Het grootste deel van die kracht zit in pakketten van de gemeenschap, niet in een speciaal gegevenscommando dat in de taal is ingebouwd.

Dat is geen kritiek. Veel uitspraken die klinken als “Python kan dat” betekenen eigenlijk “iemand heeft daar een pakket voor gebouwd”.

Dat heeft ook een keerzijde. Een pakket kan niet meer onderhouden worden, onveilig zijn, ongeschikt zijn voor je project of niet samenwerken met de rest van je werk. Iemand moet nog steeds nagaan wie het onderhoudt en wat die afhankelijkheid over twee jaar gaat kosten. Een groot ecosysteem is een echte kracht, maar geen garantie.

Uit deze lagen volgt nog iets waar we twee keer op terugkomen. Een pakket kan zo worden geschreven dat het trage, zware werk in een snellere taal gebeurt, terwijl leesbare Python-instructies dat werk aansturen. Die verdeling verklaart straks een groot deel van de AI-les en van het eerlijke antwoord op de vraag over snelheid.

Dit is niet op één middag ontworpen

De regels, de belangrijkste implementatie, de meegeleverde hulpmiddelen en de gemeenschap eromheen zijn in drie decennia opgebouwd door veel mensen die het niet altijd eens waren.

Waarom ziet de taal er dan zo uit? Waarom inspringing, waarom de nadruk op leesbaarheid en waarom de bereidheid om met andere software samen te werken? Daarvoor gaan we terug naar een onderzoeker in Nederland. Hij werkte graag met een bepaalde taal, maar liep steeds aan tegen dingen die hij er niet mee kon doen.

Verder lezen (Engels)

De inleiding van de Python Language Reference legt het onderscheid tussen de taal en haar implementaties uit. De verpakkingsgids van Python gaat in op het preciezere onderscheid tussen een distributiepakket en een importpakket. Beide zijn naslagwerken, geen beginnerslessen, en beide zijn optioneel.