Python (programmeertaal)

Uit Wikipedia, de vrije encyclopedie
Ga naar: navigatie, zoeken
Python
Python logo and wordmark.svg
Paradigma imperatief, objectgeoriënteerd
Verschenen 1991
Ontworpen door Guido van Rossum
Ontwikkeld door Python Software Foundation
Huidige versie 3.5.1 (7 december 2015)
3.4.4 (21 december 2015)
2.7.11 (5 december 2015)
Typesysteem Dynamisch, sterk
Implementaties CPython, Jython en anderen
Dialecten Stackless Python
Beïnvloed door ABC, Algol-68, C, Haskell, Icon, Lisp, Modula-3, Perl, Java
Invloed op Boo, Groovy, Ruby, Cobra
Besturingssysteem Multiplatform
Licentie Python Software Foundation License
Website (en) Officiële website
Portaal  Portaalicoon   Informatica
Een stuk broncode in Python met syntaxiskleuring.

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. De taal is mede gebaseerd op inzichten van professor Lambert Meertens die een op BASIC gebaseerde taal genaamd ABC had ontworpen, maar dan met allerlei zeer geavanceerde datastructuren. Inmiddels wordt de taal doorontwikkeld door een enthousiaste groep, geleid door Van Rossum. Deze groep wordt ondersteund door vrijwilligers op het internet. De ontwikkeling van Python wordt geleid door de Python Software Foundation. Python is vrije software.

Python heeft zijn naam te danken aan het favoriete televisieprogramma van Guido van Rossum, Monty Python's Flying Circus.[1][2]

Kenmerken[bewerken]

Syntaxis[bewerken]

Python is ontwikkeld met het oog op leesbare code. Hieruit vloeit haar "zuivere" stijl voort. Met weinig woorden kan men veel zeggen. Dit uit zich op verschillende manieren. Structuur wordt aangebracht door indentatie, of regelinspringing in plaats van bijvoorbeeld accolades uit 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. Een uitgebreide voorstelling van de syntaxis staat hieronder.

Indentatie[bewerken]

Python gebruikt als een van de 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 aparte statements, zoals bijvoorbeeld: 'begin' en 'end' (bij Pascal), of accolades '{' en '}' (bij C) om een blokstructuur aan te duiden. 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]

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. Runtime wordt slechts gecontroleerd of de methoden et cetera die worden gebruikt voor het betreffende object gedefinieerd zijn. Als dat niet zo is, volgt een foutmelding.

In de meeste andere programmeertalen is dit hetzij onmogelijk, hetzij wordt het als slechte programmeerstijl beschouwd. Die gebruiken wat in Python LBYL (Look Before You Leap) programmeerstijl heet.

Uitvoering[bewerken]

Een Python-programma wordt geschreven in een of meerdere 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]

De CPython-interpreter zet de Python-programmacode niet meteen om in machine-instructies, maar compileert naar een tussenvorm, bytecode genoemd. Deze wordt opgeslagen in de vorm van een .pyc-bestand (met de c van compiled). 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 enkel nodig wanneer 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]

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 in sommige talen (zoals C) wel moet doen.

Standalone executables[bewerken]

Het is ook mogelijk Python te gebruiken zonder de Python-interpreter en library's te installeren. Een voorbeeld van een tool hiervoor is Py2exe.

Bibliotheken[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 aan anderen ter beschikking wordt 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]

Vertoning van uitvoer[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]

Om tekstcommentaar te plaatsen in een script, 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]

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 op te kunnen vragen, wordt de input-functie gebruikt. De invoer wordt vervolgens in een variabele gestopt.

# 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]

Expressies worden met de standaard vergelijkingsoperatoren bepaald, en heeft als uitkomst de waarden True of False. Om een valse 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]

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]

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]

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]

Python heeft twee lusconstructies om een statement herhaaldelijk uit te voeren, namelijk de while-lus en de for-lus.

For-statement[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]

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]

Functies[bewerken]

Functies worden gemaakt met het def-statement, met of zonder argumenten.

def kwadrateren(getal):
    return getal*getal

print(kwadrateren(6))
>> 36

Foutafhandeling[bewerken]

Python heeft geavanceerde procedures voor exception handling, die worden gebruikt in de zogenaamde EAFP (Easier to Ask Forgiveness than Permission) stijl van programmeren. Het volgende geldt als acceptabele Pythoncode:

try:
  x = 1 / y
except ZeroDivisionError:
  x = 0

Implementaties en versies[bewerken]

De standaardimplementatie van Python is geschreven in C. Vandaar wordt ze ook soms CPython genoemd.

CPython[bewerken]

De eerste implementatie van Python is geschreven in C. Dit is de meestgebruikte versie. Ze is beschikbaar via de officiële Python-website, en staat gepreïnstalleerd op de meeste distributies en versies van Linux en Mac OS. Van deze distributie bestaan twee veelgebruikte versies: 2 en 3. Vermits versie 3 een aantal veranderingen inhoudt die niet compatibel zijn met versie 2, is versie 3 niet zo maar een vervanging van versie 2. Om een Python-programma te runnen is het belangrijk te weten welke versie van Python het gebruikt.

JPython[bewerken]

De J staat hier voor de programmeertaal Java. Deze Python versie wordt uitgevoerd aan de hand van de Java Runtime Environment. Dit is een programmeerplatform waar verschillende talen (niet enkel Java) systeemonafhankelijk kunnen op uitgevoerd worden.

IronPython[bewerken]

1rightarrow blue.svg Zie IronPython voor het hoofdartikel over dit onderwerp.

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]

1rightarrow blue.svg Zie PyPy voor het hoofdartikel over dit onderwerp.

Deze implementatie van Python is geschreven in RPython (een Python-variant) en focust op snelheid. De naam verwijst naar haar implementatietaal: de extensie van een Python-bestand is: .py.

Uses cases van Python[bewerken]

Python is een programmeertaal met een enorme waaier aan bibliotheken en kan in zo goed als elk programmeerdomein gebruikt worden. Voor sommige specifieke use cases staat Python echter bekend.

OS Scripting[bewerken]

Python is een scripttaal gebruikt voor het uitvoeren van taken op een besturingssysteem. Voordelen van Python voor deze use case zijn haar scriptachtige syntaxis, de tools die de Python-taal en standaardbibliotheek aanbiedt voor zulke taken en dat Python min of meer systeemonafhankelijk werkt. Dit laatste wil zeggen dat dezelfde Pythoncode op verschillende besturingssystemen kan gebruikt worden.

Wiskunde en wetenschap[bewerken]

Python is ook bekend als programmeertaal voor wiskundige en wetenschappelijke programma's. Voor deze use case biedt zij, met haar bibliotheken NumPy en SciPy, krachtige tools.

Web[bewerken]

Python kan ook gebruikt worden om webapplicaties te ontwikkelen. Hiervoor bestaan allerlei webapplicatie-frameworks, zoals Django, 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]

Externe links[bewerken]

Wikibooks Wikibooks heeft meer over dit onderwerp: Cursus programmeren in Python.