demo_package_21_11_2025 0.1.0
Add your description here
Requires Python: >=3.12

# Python-Workshop (17.11.2025 - 21.11.2025)

Dieses Repository enthält die Materialien und Code-Beispiele eines fünftägigen Python-Kurses.

## Inhalte

### Montag (01_montag.ipynb)

* **Einführung & Setup**: "Hello World", Jupyter Notebook Basics.
* **Package Management**: Verwendung von `uv` zur Verwaltung von Abhängigkeiten (`numpy`, `matplotlib`, `pandas`).
* **Data Science Basics**: Kurzer Einblick in `pandas` (DataFrames) und `matplotlib` (Plots).
* **Type Hinting**: Grundlagen der Typ-Annotationen, Type Aliasing, `TypedDict`, `Literal`.
* **Datenformate**: Arbeiten mit JSON (`json` Modul).
* **Funktionale Programmierung**: `lambda`-Funktionen, `map`, `filter`.
* **List Comprehensions**: Effiziente Erstellung und Filterung von Listen.
* **String Formatting**: F-Strings, Format-Specifiers (Alignment, Precision, Types).
* **Logging Basics**: Einfaches Logging mit `logging.basicConfig`.

### Dienstag (02_dienstag.ipynb)

* **Advanced Logging**:
  * Konfiguration via `logging.config.dictConfig` und YAML.
  * Eigene Logger, Handler (Stream, File, Rotating), Formatter und Filter.
  * Logging von Exceptions (`exc_info`).
* **Error Handling**: Globaler Exception-Hook (`sys.excepthook`).
* **Objektorientierte Programmierung (OOP)**:
  * Klassen und Instanzen (`class`, `__init__`).
  * Methoden, Attribute, Properties (`@property`, `@x.setter`).
  * Vererbung, Mehrfachvererbung, MRO (Method Resolution Order).
  * Magic Methods (z.B. `__str__`, `__repr__`, `__add__`).
  * Sichtbarkeiten (Public, Protected, Private/Name Mangling).
  * Klassen- und Statische Methoden (`@classmethod`, `@staticmethod`).
  * Abstrakte Basisklassen (`abc.ABC`, `@abstractmethod`).
* **Introspection**: `dir()`, `vars()`, `type()`.
* **Decorators (Intro)**: Grundlagen von Funktions-Dekoratoren.

### Mittwoch (03_mittwoch.ipynb)

* **Advanced Decorators**:
  * Dekoratoren mit Argumenten.
  * Klassen-Dekoratoren.
  * Praktische Beispiele (Type-Checking, Logging).
* **Dataclasses**: Einfache Datenklassen mit `@dataclass`.
* **Rekursion & Caching**: Rekursive Funktionen (Fibonacci) und Optimierung mit `functools.cache`.
* **Generatoren**:
  * `yield` und `yield from`.
  * Generator Expressions.
  * Unendliche Sequenzen.
* **Profiling**: Performance-Analyse mit `cProfile` (Vergleich List Comprehension vs. Generator Expression).
* **Coroutines**: Senden von Werten an Generatoren (`.send()`), Exception Handling in Generatoren (`.throw()`).

### Donnerstag (04_donnerstag.ipynb)

* **Asynchrone Programmierung**:
  * `async` - `await` Syntax.
  * Verwendung des Moduls `asyncio`.
  * Anlegen von `Task` Objekten.
  * Verwendung von `gather` zum Sammeln der Ergebnisse.
* **Asynchroner Webscrapper**: Transition von einem Synchronen Projekt in ein asynchrones Framework. Zusätzlich Demonstration von `aiohttp`.
* **Unittesting**:
  * Erstellen von Tests mit Pythons builtin `unittest` Modul.
  * Verwendung von VSC als Testumgebung.
  * Testabdeckung mit `coverage`.
  * Einblick in `pytest`.
* **Exception Handling**: Erstellen und Verwalten eigener Exceptions.
* **Argparse**: Python Skripte auf der Kommandozeile.

### Freitag (05_freitag.ipynb)

* TODO

## Ausführen der Notebooks

Stellen Sie sicher, dass Sie die Abhängigkeiten installiert haben:

```bash
uv sync
```

Starten Sie dann den Jupyter Server:

```bash
uv run jupyter lab
```