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 doorrte 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, wordtNonegeretourneerd. - Meerdere waarden retourneren via een tuple:
return (value1, value2) value1, value2 = func1(..) - Als er geen
-
Anonieme functies (Lambda)
lambda x : x * 2 # gelijk aan: def func1(x) : return x * 2
Veelgebruikte Functies
-
Enumerate: Retourneert een reeks (index, waarde) tuples.
for key, val in enumerate(collection): -
Sorted: Sorteert een itereerbaar object.
sorted([2, 1, 3]) => [1, 2, 3] -
Zip: Combineert elementen van meerdere reeksen tot tuples.
zip(seq1, seq2) => [('seq1_1', 'seq2_1'), (..), ..] -
Reversed: Retourneert een omgekeerde iterator.
list(reversed(range(10)))
Control Flow
-
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 -
Veelgebruikt ‘for’-gebruik:
for element in iterator: -
‘pass’: Doet niets, gebruikt als placeholder.
-
Ternaire expressie:
value = true-expr if condition else false-expr -
Geen switch/case in oudere versies, gebruik
if/elif.
Objectgeoriënteerd
-
‘object’ is de basis voor alle Python-typen.
-
Alles (getallen, strings, functies, klassen, modules) is een object met een ’type’. Variabelen zijn verwijzingen naar de locatie in het geheugen.
-
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') -
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)
- Basisvorm
try:
..
except ValueError as e:
print(e)
except (TypeError, AnotherError):
..
except:
..
finally:
..- 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.
-
List Comprehension: Vormt een nieuwe lijst door elementen te filteren en te transformeren.
[expr for val in collection if condition] -
Dictionary Comprehension:
{key-expr : value-expr for value in collection if condition} -
Set Comprehension: Zelfde als list comprehension, maar met
{}in plaats van[]. -
Nested List Comprehension:
[expr for val in collection for innerVal in val if condition]