## Was sollte man in python machen?
### Was python?
- Interpretierte Skirptsprache
- cpythons Core ist in C programmiert
- gibt aber mehr implementationen - jython.
- python3(.10) ist aktuell
- Beliebt weil optimiert auf Programmierzeit
- Mies lamgsam im Vergleich zu C
- Man kann C Code wrappen (TODO: Wollen wir das später zeigen? - Wenn ja. Wie geht das denn? Wie viel vodoo magic ist das?)
### Syntax
- variablen zuweisen
- funktionen aufrufen
- mehr zu funktionen und built-in funktionen später
- Es gibt nur Einrückungen für logische Blöcke
- Keine ezessive Klammerung
- Keine Semicolons
- if, elif, else
- 'boolsche Syntax' -> ==, !=, >=, >, and, or, is, not
- for, while
- TODO: hier schon enumerate?
- Laufzeit von for-loops ist besser bzw while sucks
- List comprehensions :D
### Datentypen
Idee: Wir zeigen erst die basis Datentypen und was da anders als C ist.
Dann mutable
Dann reißen wir Objekte an:
"Oh! Das sind ja Objekte! Da kann man ja Dinge drauf aufrufen :0" und zeigen dann Dinge wie append und join
Im letzten Schritt zeigen wir dann wie man seine eigenen Klassen bauen kann.
_Alternativ:_
Zu allen Datentypen immer direkt die wichtigsten Funktionen inkl. cooler Syntax zeigen und danach die Threorie erklären
#### immutable
- True, False, None
- int (bel. Länge), float -> alle nummern was gibt
- to hex, to bytes?
- string (boah, krass! Das hat C nicht! :0)
- f strings
- bytes (?)
- tuple
- Überleitung zu immutable
#### mutable
- datetypen sind run and go. was ist speicher allokieren?!
- listen (alles kann da rein)
- wie man listen mit bestimmtem stuff initialisiert
- append
- dict
- dict comprehensions ^^
- get
- vergleich zu jsons ziehen?
- set
- wie listen nur anders
- vorsicht mit dem constructor
#### syntactic sugar
- slicing
- getitem / setitem -> []
#### ducktyping
- str, getitem, setitem, eq, leq
### Klassen
- init
- funktionen auf Klassen
- wie erstelle ich eine Klasse?
- property
##### Aufgabe zum Anwenden:
[Custom String](https://gist.github.com/nonchris/25676e4d9c61d933168e352ef8a0bde1)
### funktionen
Manchmal ist ein ganzes Objekt etwas viel... Funktionen!
- synatx - def...
- typehinting
- keyword args!
- funktionen können nicht überladen werden
- \*args
- Zeigen wir dass man mit dieser Syntax auch Dinge in mehrere Variablen entpacken kann?
- \*\*kwargs
- krass man kann funktionen übergeben
- bock auf decoratoren?
#### Kontextmanager
- with
- open, conn
- an dieser Stelle könnte man mal auf builtin funktionen eingehen
- open, type, filter, enumerate, range, print
### Error handling
- try, except, finally
### imports
- syntax unterschiede zwischen import x und from x import y
- die standard libraries
- os, json, csv
- was is n modul? - ach so im Grunde einfach nur eine python datei.
- zeigen was bei import mit eigener Datei passiert
- Daher nur funktionen und klassen schreiben
- if name == main
#### meet pip
pip installs packages ;)
- requrements.txt
#### geiles libraries
##### built-in
math, functools
##### pypi
- numpy, pandas, pwntools, discord.py :P
#### packaging
wollen wir zeigen wie eine gute projektstruktur aussieht?
Is halt schon geil, wenn man das kann...
Eventuell sogar wie man auf pip pushed? :D
#### Coding style
- if return, else return
- nicht alles in ein if/ else packen