Python (programmeertaal)
Python | ||||
---|---|---|---|---|
Paradigma | functioneel programmeren, objectgeoriënteerd programmeren, dynamisch programmeren, imperatief programmeren | |||
Verschenen | 20 februari 1991 (33 jaar) | |||
Ontworpen door | Guido van Rossum | |||
Ontwikkeld door | Python Software Foundation | |||
Huidige versie | 3.13.0[1] (7 oktober 2024) | |||
Typesysteem | Duck-typing, dynamisch typesysteem, graduele typering | |||
Dialecten | Stackless Python | |||
Beïnvloed door | Algol 68, ABC, Modula-3, C, C++, Perl, Java, Lisp, Haskell, APL, CLU, Dylan, Icon, Standard ML | |||
Invloed op | Boo, Groovy, Ruby, Cobra | |||
Besturingssysteem | Multiplatform | |||
Licentie | Python Software Foundation License | |||
Website | (en) Officiële website | |||
|
Python is een programmeertaal die begin jaren 90 ontworpen en ontwikkeld werd door Guido van Rossum, destijds verbonden aan het Centrum voor Wiskunde en Informatica (daarvoor Mathematisch Centrum) in Amsterdam.[2] De taal is mede gebaseerd op inzichten van professor Lambert Meertens, die de programmeertaal ABC ontworpen had, bedoeld als alternatief voor BASIC, maar dan met geavanceerde datastructuren. Inmiddels wordt de taal doorontwikkeld door een enthousiaste groep, tot juli 2018 geleid door Van Rossum.[3] Deze groep wordt ondersteund door vrijwilligers op het internet. De Python Software Foundation leidt de ontwikkeling van Python. Python is vrije software.
Python dankt zijn naam aan het favoriete televisieprogramma van Guido van Rossum, Monty Python's Flying Circus.[4][5]
Kenmerken
[bewerken | brontekst bewerken]Syntaxis
[bewerken | brontekst bewerken]Python is ontwikkeld met het oog op leesbare code. Dit uit zich op verschillende manieren. Zo wordt structuur aangebracht door indentatie (regelinspringing) in plaats van bijvoorbeeld accolades zoals in C-achtige talen. Statements (vergelijkbaar met zinnen uit gewone taal) worden simpelweg beëindigd door het eind van de regel. Variabelen krijgen geen typedeclaratie. Python maakt gebruik van duck-typing.
Inspringing
[bewerken | brontekst bewerken]Python gebruikt als een van weinige talen de mate van inspringing van de regel, ook wel indentatie genoemd, als indicatie van gelaagdheid van de verschillende onderdelen van het programma. Dit is iets wat Jaap van Ganswijk, de ontwerper van JPL en UHL al sinds het begin van de jaren tachtig voorstaat, maar dat ook anderen wel geopperd hebben.
Andere talen verschillen hierin door het gebruik van haakjes, die dan bestaan uit de woorden BEGIN en END (bij Pascal, Algol en PL/1) of accolades (bij C, C++ en Java) om een blokstructuur aan te duiden. In de praktijk zal een programmeur ook bij deze talen de regels inspringen om het programma leesbaarder te maken.
Bij Python wordt de blokstructuur uitsluitend door inspringing bepaald. Door deze inspringing en een aantal andere elementen kan de structuur van de taal worden vergeleken met de structuur van de pseudoprogrammeertaal die in veel gevallen wordt gebruikt in de literatuur om algoritmen uit te leggen.
Duck-typing
[bewerken | brontekst bewerken]Python implementeert het zogenaamde duck-typing. Dit houdt in dat het type van een variabele en het type van een argument van bijvoorbeeld een functie niet gedefinieerd hoeft te worden. Bij compilatie vindt (dus) ook geen typecontrole plaats. In runtime wordt slechts gecontroleerd of de methoden die worden gebruikt voor het betreffende object, gedefinieerd zijn. Als dat niet zo is, volgt een foutmelding.
EAFP
[bewerken | brontekst bewerken]Een veel voorkomende wijze van programmeren in Python is het zogenaamde EAFP-systeem (Easier to Ask for Forgiveness than Permission, naar een uitspraak van Grace Hopper). Hierbij wordt een functie of methode gestart zonder eerst te controleren of deze wel goed werkt, en vervolgens een foutmelding gegeven en afgevangen als dat niet het geval is. In de meeste andere programmeertalen is dit ofwel onmogelijk, of het wordt als slechte programmeerstijl beschouwd. Die gebruiken wat in Python LBYL-programmeerstijl (Look Before You Leap) heet: eerst de argumenten van een functie bekijken om te zien of de functie goed gaat, en slechts verdergaan als dat het geval is.
Uitvoering
[bewerken | brontekst bewerken]Een Python-programma wordt geschreven in een of meer tekstbestanden met de extensie .py. Om een Python-programma uit te voeren dient men, in het geval van CPython, de Python-interpreter aan te roepen, gevolgd door de naam van het bestand, waarin het begin van het programma wordt gecodeerd.
Interpreter
[bewerken | brontekst bewerken]De CPython-interpreter zet de Python-programmacode niet meteen om in machine-instructies, maar compileert naar een tussenvorm, bytecode genoemd. Deze code wordt opgeslagen in de vorm van een .pyc-bestand (met de c van compiled, gecompileerd). De bytecode is onafhankelijk van het besturingssysteem – ze kan verhuisd worden naar een ander besturingssysteem. De volgende stap is het uitvoeren van de bytecode door de Python-virtual-machine. Deze zet de bytecode om in machinetaal (instructies voor de processor). De eerste stap is alleen nodig als de interpreter geen up-to-date .pyc-compilatie vindt. De tussenstap vindt plaats omdat bytecode geoptimaliseerd is om sneller te worden omgezet in machine-instructies. Daarnaast zorgt de virtual machine voor de garbage collection.
Omdat Python een zogenaamde interpreter is, zijn programma's geschreven in Python langzamer dan programma's geschreven in een taal met een compiler, zoals C. Pythonprogramma's zijn ook langzamer door de garbage collection.
Garbage collection
[bewerken | brontekst bewerken]Net als in veel andere moderne scripttalen wordt in Python geheugenruimte automatisch gereserveerd voor nieuwe variabelen of variabelen die groeien, en weer vrijgegeven als er geen referenties meer zijn aan die variabelen (garbage collection). Op deze manier wordt de programmeur een hoop werk bespaard dat hij of zij in sommige talen (zoals C en C++) wel moet doen.
Standalone executables
[bewerken | brontekst bewerken]Het is ook mogelijk Python te gebruiken zonder de Python-interpreter en -bibliotheken te installeren. Een voorbeeld van een tool hiervoor is Py2exe.
Bibliotheken
[bewerken | brontekst bewerken]Python wordt geleverd met een uitgebreide bibliotheek om van alles en nog wat standaard te kunnen bewerken. Het is erg eenvoudig om in Python herbruikbare code te schrijven. Doordat veel van de bibliotheken die mensen schrijven, gratis en vrij aan anderen ter beschikking worden gesteld, groeien de mogelijkheden van de bibliotheek voortdurend. Python wordt zo tot een programmeertaal die voor razendsnel ontwikkelen van een nieuwe applicatie kan worden gebruikt, zonder dat de daarbij geproduceerde code onleesbaar wordt.
Syntaxis
[bewerken | brontekst bewerken]Uitvoer
[bewerken | brontekst bewerken]Vertoning van uitvoer op de standaarduitvoer (meestal het scherm) gebeurt in Python 3 met de print
-functie:
print("Hallo wereld")
>> Hallo wereld
print(3*2)
>> 6
print("3*2")
>> 3*2
Python gaat na de print
-functie meteen een regel verder. Om op dezelfde regel nog iets te printen, is er het end
-argument met een string als invoer:
print("Hallo")
print("wereld")
>> Hallo
>> wereld
print("Hallo", end=" ")
print("wereld")
>> Hallo wereld
In Python maakt het overigens niet uit of de af te drukken string tussen enkele of dubbele aanhalingstekens wordt gezet, als het maar consequent gebeurt.
print("'s Morgens zeg ik", ':', ' "Hallo!"')
>> 's Morgens zeg ik: "Hallo!"
Commentaar
[bewerken | brontekst bewerken]Om in een script tekstcommentaar te plaatsen dat niet uitgevoerd mag worden, kan het #
-teken worden gebruikt. Voor commentaar met meerdere regels wordt een blok met drie dubbele aanhalingstekens gebruikt.
# print("Deze regel wordt niet uitgevoerd")
"""
print("En deze regels?")
print("Ook niet!")"""
print("Deze regel wel")
>> Deze regel wel
Variabelen en feedback
[bewerken | brontekst bewerken]Variabelen zijn containers die een waarde toegewezen krijgen of hebben gekregen. Variabelen kunnen worden gemanipuleerd, gebruikt of getoond. In Python hoeft de variabele niet van tevoren te worden gedeclareerd. Om de invoer van een gebruiker te kunnen opvragen wordt de input
-functie gebruikt. De invoer wordt vervolgens aan een variabele toegekend.
# Werking van variabelen
som = 4*3
print(som)
>> 12
# Manipulatie van variabelen
vijf = 4
drie = 3
print(vijf + drie)
>> 7
correctie = 5
vijf = correctie
print(vijf + drie)
>> 8
# Nog een voorbeeld van manipulatie
breedte = 20
hoogte = 10
oppervlakte = breedte * hoogte
print(oppervlakte)
>> 200
hoogte = hoogte * 2 # hoogte *= 2 mag ook
oppervlakte = breedte * hoogte
print(oppervlakte)
>> 400
# Invoer van gebruiker vragen
naam = input("Wat is uw naam?")
print("Hallo " + naam + "!")
>> Wat is uw naam?
<< Monty
>> Hallo Monty!
Expressies
[bewerken | brontekst bewerken]Expressies worden met de standaard vergelijkingsoperatoren bepaald en hebben als uitkomst de waarden True
of False
. Om een onware overeenkomst te testen wordt een uitroepteken gebruikt.
hoog = 5
laag = 2
print(laag < hoog)
>> True
print(laag == 3)
>> False
print(laag != 3)
>> True
Booleaanse operatoren
[bewerken | brontekst bewerken]Bij een expressie kunnen de booleaanse operatoren or
en and
worden gebruikt.
hoog = 9
laag = 3
print(hoog < laag or laag == 3) # Test of een van de expressies waar is
>> True
print(hoog < laag and laag == 3) # Test of beide expressies waar zijn
>> False
Beslissingen
[bewerken | brontekst bewerken]Beslissingen worden genomen met een if
-statement, aan de hand van een expressie. Deze kunnen worden aangevuld met een else
-statement en elif
-statements.
# Importeren van library voor het tonen van willekeurige getallen
import random
win = random.randint(1,3)
print("Welkom bij Let's make a deal. Kies een deur.")
print("[1] Deur Een")
print("[2] Deur Twee")
print("[3] Deur Drie")
deur = int(input("Geef een keuze op:"))
# If-else-blok
if deur == win:
print("Achter de deur zit een koffer met een miljoen euro. Jij wint!")
else:
print("Achter de deur bevindt zich een pakezel waarmee je terug naar huis kan gaan. Jij verliest!")
# Ervan uitgaand dat de "win"-variabele hetzelfde is als de opgegeven invoer
...
>> Geef een keuze op:
<< 3
>> Achter de deur zit een koffer met een miljoen euro. Jij wint!
Datastructuren
[bewerken | brontekst bewerken]De meestvoorkomende datastructuur in Python is de ‘list’. Deze bestaat uit een index van verschillende soorten eenheden. Het eerste indexgetal is hierbij altijd een nul.
kleuren = ["rood", "geel"]
print(kleuren[1])
>> geel
print(kleuren)
>> ['rood', 'geel']
kleuren.append("blauw")
print(kleuren)
>> ['rood', 'geel', 'blauw']
Repetitie
[bewerken | brontekst bewerken]Python heeft twee lusconstructies om een statement herhaaldelijk uit te voeren, namelijk de while
-lus en de for
-lus.
For-statement
[bewerken | brontekst bewerken]De for
-lus is gemaakt om datastructuren af te lopen. Hij verschilt van de meeste andere for
-lussen uit programmeertalen en is het best te vergelijken met de foreach
-lus uit PHP).
# Voorbeeld met for-lussen
kleuren = ["rood", "geel", "blauw", "zwart", "oranje", "paars", "groen"]
hoeveelheid = 0 # Deze variabele wordt gemanipuleerd in de for-lus, dus moet hij hier vooraf worden gedeclareerd
for aantal in kleuren:
hoeveelheid += 1
print("In mijn doos met kleurpotloden zitten " + str(hoeveelheid) + " potloden.")
# Integers kunnen niet worden geconcateneerd met strings, vandaar de str-functie
# Zie ook http://nl.wikipedia.org/wiki/Concatenatie
>> In mijn doos met kleurpotloden zitten 7 potloden.
# Nog een voorbeeld met for-lussen
kleuren = ["rood", "geel", "blauw", "zwart", "oranje", "paars", "groen"]
print("Mijn doos met kleurpotloden bevat een", end=" ")
for kleur in kleuren:
if kleur == kleuren[-1]: # Vergelijking met laatste element uit lijst
print(kleur + " potlood.")
elif kleur == kleuren[-2]: # Vergelijking met een-na-laatste element uit lijst
print(kleur, end=" en ")
else:
print(kleur, end=", ")
>> Mijn doos met kleurpotloden bevat een rood, geel, blauw, zwart, oranje, paars en groen potlood.
While-statement
[bewerken | brontekst bewerken]De while
-lus herhaalt een statement aan de hand van een expressie:
getal = 1
print("Ik kan tot vijf tellen!")
while getal <= 5:
print(getal)
getal += 1
>> Ik kan tot vijf tellen!
>> 1
>> 2
>> 3
>> 4
>> 5
Bij for
- en while
-statements kan de range
-functie worden gebruikt.
print("Ik kan tot vijf tellen!")
for getal in range(1, 6): # Laatste getal wordt niet meegeteld
print(getal)
# Output hetzelfde als vorige voorbeeld
Abstractie
[bewerken | brontekst bewerken]Functies
[bewerken | brontekst bewerken]Functies worden gemaakt met het def
-statement, met of zonder argumenten.
def kwadrateren(getal):
return getal*getal
print(kwadrateren(6))
>> 36
Foutafhandeling
[bewerken | brontekst bewerken]Python heeft geavanceerde procedures voor exception handling, die worden gebruikt in de zogenaamde EAFP-stijl (Easier to Ask Forgiveness than Permission) van programmeren. De volgende code geldt als acceptabele Pythoncode:
try:
x = 1 / y
except ZeroDivisionError:
x = 0
Implementaties en versies
[bewerken | brontekst bewerken]De standaardimplementatie van Python is geschreven in C. Vandaar wordt ze ook soms CPython genoemd.
CPython
[bewerken | brontekst bewerken]De eerste implementatie van Python is geschreven in C. Dit is de meestgebruikte versie. Ze is beschikbaar via de officiële Pythonwebsite, en staat voorgeïnstalleerd op de meeste distributies en versies van Linux en Mac OS.
Van deze distributie bestaan twee veelgebruikte versies: 2 en 3. Aangezien versie 3 een aantal veranderingen inhoudt die niet compatibel zijn met versie 2, is versie 3 niet zomaar een vervanging van versie 2. Om een Pythonprogramma uit te voeren is het belangrijk te weten welke versie van Python het gebruikt.
Jython
[bewerken | brontekst bewerken]De J staat hier voor de programmeertaal Java. Deze Pythonversie wordt uitgevoerd aan de hand van de Java Runtime Environment. Dit is een programmeerplatform waarop verschillende talen (niet enkel Java) systeemonafhankelijk uitgevoerd kunnen worden.
IronPython
[bewerken | brontekst bewerken]Ook .NET heeft haar eigen versie van Python. .NET is de tegenhanger van de Java Runtime Environment gecreëerd door Microsoft, en biedt programmeurs een platform om Windows-applicaties te schrijven.
PyPy
[bewerken | brontekst bewerken]Deze implementatie van Python is geschreven in RPython (een beperkte Python-variant), en focust op snelheid. De naam verwijst naar haar implementatietaal: de extensie van een Python-bestand is: .py.
Use cases van Python
[bewerken | brontekst bewerken]Python is een programmeertaal met een enorm aanbod aan bibliotheken en kan in zo goed als elk programmeerdomein gebruikt worden. Voor sommige specifieke usecases is Python echter speciaal geschikt.
OS Scripting
[bewerken | brontekst bewerken]Python is een scripttaal gebruikt voor het uitvoeren van taken op een besturingssysteem. Voordelen van Python voor deze usecase zijn haar scriptachtige syntaxis, de tools die de Pythontaal en standaardbibliotheek aanbiedt voor zulke taken en dat Python min of meer systeemonafhankelijk werkt. Dit laatste wil zeggen dat dezelfde Pythoncode op verschillende besturingssystemen gebruikt kan worden.
Wiskunde en wetenschap
[bewerken | brontekst bewerken]Python is ook bekend als programmeertaal voor wiskundige en wetenschappelijke programma's. NumPy en SciPy zijn krachtige bibliotheken voor wiskundige en wetenschappelijke berekeningen.
Web
[bewerken | brontekst bewerken]Python kan ook gebruikt worden om webapplicaties te ontwikkelen. Hiervoor bestaan allerlei webapplicatie-frameworks, zoals Django en Flask, en servertechnologieën, zoals mod_python. Men heeft ook een standaard gedefinieerd, genaamd Web Server Gateway Interface (WSGI), voor de communicatie tussen webservers en webapplicatie-frameworks. Op deze manier kunnen portable webapplicaties en frameworks geschreven worden in Python.
Zie ook
[bewerken | brontekst bewerken]Externe links
[bewerken | brontekst bewerken]- ↑ "Python 3.13 released"; geraadpleegd op: 7 oktober 2024; taal van werk of naam: Engels; datum van uitgave: 7 oktober 2024; huispublicatie: LWN.net.
- ↑ 'Why was Python created in the first place?', een samenvatting van de ontstaansgeschiedenis van Python, door Guido van Rossum
- ↑ 'Transfer of power', een mail in de python-committers mailinglijst, door Guido van Rossem
- ↑ Python FAQ
- ↑ Personal history part 1, Python-history blogspot
- De Python-dictator voor het leven, interview met Guido van Rossum, NRC, 2 maart 2015