Skip to content

Python Spiekbriefje

Python is een cross-platform programmeertaal. Het is een objectgeoriënteerde, dynamisch getypeerde taal die oorspronkelijk werd ontworpen voor het schrijven van automatiseringsscripts (shell). Met de voortdurende updates en nieuwe functies wordt het steeds vaker gebruikt voor onafhankelijke, grootschalige projectontwikkeling.

Algemeen

  • Python is hoofdlettergevoelig
  • Python indexering begint bij 0
  • Python gebruikt witruimte (tabs of spaties) voor inspringing in plaats van accolades.

Help

Help-hoofdpagina help()
Functie help help(str.replace)
Module help help(re)

Modules (Bibliotheken)

Module-inhoud weergeven dir(module1)
Module laden import module1 *
Functie uit module aanroepen module1.func1()

De import-instructie creëert een nieuwe naamruimte en voert alle instructies uit in het bijbehorende .py-bestand. Als je de module-inhoud in de huidige naamruimte wilt laden, gebruik dan from module1 import *.

Scalaire Typen

Datatype controleren: type(variable)

Integers (Gehele getallen)

int/long - Grote gehele getallen worden automatisch geconverteerd naar long integers.

Floats (Drijvende-kommagetallen)

float - 64-bits, er is geen “double” type.

Booleans

bool - True of False.

Strings

str - Python 2.x standaard: ASCII; Python 3: Unicode.

  • Strings kunnen enkelvoudige, dubbele of drievoudige aanhalingstekens gebruiken.
  • Een string is een reeks tekens en kan dus als andere reeksen worden behandeld.
  • Speciale tekens kunnen worden ontsnapt met \ of door r te gebruiken voor raw strings.
    str1 = r'this\f?ff'
  • String-formattering kan op verschillende manieren:
    template = '%.2f %s haha $%d'
    str1 = template % (4.88, 'hola', 2)

str(), bool(), int() en float() zijn ook expliciete typeconversiefuncties.

None

NoneType(None) - De ’null’-waarde in Python (er bestaat slechts één instantie van het None-object).

  • None is geen gereserveerd trefwoord, maar de enige instantie van “NoneType”.
  • None is de standaardwaarde voor optionele functieparameters:
    def func1(a, b, c = None)
  • Veelvoorkomend gebruik van None:
    if variable is None:

Datum en Tijd

datetime - Ingebouwde “datetime”-module die typen zoals “datetime”, “date” en “time” biedt.

  • “datetime” combineert informatie uit “date” en “time”.
    Datum/tijd maken van string dt1 = datetime.strptime(‘20091031’, ‘%Y%m%d’)
    “date”-object ophalen dt1.date()
    “time”-object ophalen dt1.time()
    Datum/tijd formatteren naar string dt1.strftime(’%m/%d/%Y %H:%M’)
    Veldwaarden wijzigen dt2 = dt1.replace(minute=0, second=30)
    Verschil berekenen diff = dt1 - dt2 # diff is een ‘datetime.timedelta’ object

Datastructuren

Tuples

Een tuple is een onveranderlijke reeks van vaste lengte.

Tuple maken tup1=4,5,6 of tup1 = (6,7,8)
Geneste tuple maken tup1 = (4,5,6), (7,8)
Reeks/iterator naar tuple converteren tuple([1, 0, 2])
Tuples samenvoegen tup1 + tup2
Tuple uitpakken a, b, c = tup1
Variabelen wisselen b, a = a, b

Lijsten (Lists)

Een lijst is een veranderlijke reeks waarvan de lengte kan variëren.

Lijst maken list1 = [1, ‘a’, 3] of list1 = list(tup1)
Lijsten samenvoegen list1 + list2 of list1.extend(list2)
Toevoegen aan lijst list1.append(‘b’)
Invoegen op positie list1.insert(posIdx, ‘b’)
Element verwijderen via index valueAtIdx = list1.pop(posIdx)
Verwijder eerste voorkomen van waarde list1.remove(‘a’)
Controleren of waarde in lijst exists 3 in list1 => True
Lijst sorteren list1.sort()
Sorteren met functie list1.sort(key=len) # op lengte

Opmerking:

  • De “start”-index is inclusief, de “stop”-index is exclusief.
  • start/stop kunnen worden weggelaten, standaard is begin/einde.

Slicing

Reekstypen zijn o.a. ‘str’, ‘array’, ’tuple’, ’list’.

list1[start:stop]
list1[start:stop:step]
list1[::2]
str1[::-1]

Dictionaries (Hash)

Dictionary maken dict1 = {‘key1’ : ‘value1’, 2 : [3, 2]}
Dictionary maken via zip dict(zip(keyList, valueList))
Element ophalen dict1[‘key1’]
Element wijzigen/toevoegen dict1[‘key1’] = ’newValue’
Waarde ophalen met fallback dict1.get(‘key1’, defaultValue)
Bestaan controleren ‘key1’ in dict1
Element verwijderen del dict1[‘key1’]
Lijst met Keys ophalen dict1.keys()
Lijst met Values ophalen dict1.values()
Waarden bijwerken dict1.update(dict2)

Sets

Een set is een ongeordende verzameling unieke elementen.

Set maken set([3, 6, 3]) of {3, 6, 3}
Controleren op subset set1.issubset(set2)
Controleren op superset set1.issuperset(set2)
Gelijkheid controleren set1 == set2
Unie (of) set1
Doorsnede (en) set1 & set2
Verschil set1 - set2
Symmetrisch verschil (xor) set1 ^ set2

Functies

  • Basisvorm

    def func1(posArg1, keywordArg1 = 1, ..):
  • “Functies zijn objecten” veelgebruikt patroon:

    def func1(ops = [str.strip, user_define_func, ..], ..):
        for function in ops:
            value = function(value)
  • Retourwaarden

    • Als er geen return-instructie is, wordt None geretourneerd.
    • Meerdere waarden retourneren via een tuple:
     return (value1, value2)
     value1, value2 = func1(..)
  • Anonieme functies (Lambda)

    lambda x : x * 2
    # gelijk aan: def func1(x) : return x * 2

Veelgebruikte Functies

  1. Enumerate: Retourneert een reeks (index, waarde) tuples.

    for key, val in enumerate(collection):
  2. Sorted: Sorteert een itereerbaar object.

    sorted([2, 1, 3]) => [1, 2, 3]
  3. Zip: Combineert elementen van meerdere reeksen tot tuples.

    zip(seq1, seq2) => [('seq1_1', 'seq2_1'), (..), ..]
  4. Reversed: Retourneert een omgekeerde iterator.

    list(reversed(range(10)))

Control Flow

  1. Vergelijkingsoperatoren:

    Controleren of objecten identiek zijn var1 is var2
    Controleren of objecten niet identiek zijn var1 is not var2
    Controleren op gelijke waarde var1 == var2
  2. Veelgebruikt ‘for’-gebruik:

    for element in iterator:
  3. ‘pass’: Doet niets, gebruikt als placeholder.

  4. Ternaire expressie:

    value = true-expr if condition else false-expr
  5. Geen switch/case in oudere versies, gebruik if/elif.

Objectgeoriënteerd

  1. ‘object’ is de basis voor alle Python-typen.

  2. Alles (getallen, strings, functies, klassen, modules) is een object met een ’type’. Variabelen zijn verwijzingen naar de locatie in het geheugen.

  3. Basisvorm van een klasse:

    class MyObject(object):
        # 'self' is vergelijkbaar met 'this' in Java/C++
        def __init__(self, name):
            self.name = name
    
        def memberFunc1(self, arg1):
            ..
    
        @staticmethod
        def classFunc2(arg1):
            ..
    
    obj1 = MyObject('name1') 
    obj1.memberFunc1('a') 
    MyObject.classFunc2('b')
  4. Interactief hulpmiddel:

    dir(variable1) # Lijst met alle beschikbare methoden

String-bewerkingen

Lijsten/tuples samenvoegen met scheidingsteken:

', '.join([ 'v1', 'v2', 'v3']) => 'v1, v2, v3'

String-formattering:

string1 = 'My name is {0} {name}'
newString1 = string1.format('Sean', name = 'Chen')

String splitsen:

sep = '-'
stringList1 = string1.split(sep)

Substring verkrijgen:

start = 1
string1[start:8]

String opvullen met nullen:

month = '5'
month.zfill(2) => '05' 

Uitzonderingen (Exceptions)

  1. Basisvorm
try:
    ..
except ValueError as e:
    print(e)
except (TypeError, AnotherError):
    ..
except:
    ..
finally:
    ..
  1. Uitzonderingen handmatig opwerpen:
raise AssertionError # Assertie mislukt
raise SystemExit # Verzoek om programma stop te zetten
raise RuntimeError('Error message :..')

List, Set en Dict Comprehensions

Syntactische suiker om code leesbaarder te maken.

  1. List Comprehension: Vormt een nieuwe lijst door elementen te filteren en te transformeren.

    [expr for val in collection if condition]
  2. Dictionary Comprehension:

    {key-expr : value-expr for value in collection if condition}
  3. Set Comprehension: Zelfde als list comprehension, maar met {} in plaats van [].

  4. Nested List Comprehension:

    [expr for val in collection for innerVal in val if condition]