Python

Vooraf

Python is misschien wel een van de leukste programmeer talen. Niet alleen voor de beginner. Je kunt er vrijwel alles mee maken, van bereken scripts tot GUI programma’s. Beginnen is vrij makkelijk. Installeer Python en schrijf een script.

#!/usr/bin/python

print "Hallo, Python!"

Geschiedenis

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.

Syntaxis

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

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

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

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

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

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

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

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

Vertoning van uitvoer

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

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

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

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

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

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

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

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

For-statement

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

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

Functies

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

def kwadrateren(getal):
    return getal*getal

print(kwadrateren(6))
>> 36

Foutafhandeling

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

 

 

Bron:wikipedia

Geef een reactie