
Programowanie w Python– poziom zaawansowany
Szkolenia otwarte
3 900 PLN
Szkolenia zamknięte
Cena ustalana indywidualnie
O szkoleniu
Kurs ten jest przeznaczony dla osób programujących w Pythonie które chciałyby pójść o krok dalej w tym języku – z poziomu początkującego/średniozaawansowanego na zaawansowany/ekspercki. Zarówno osoby tworzące oprogramowanie w Pythonie jak i posługujące się nim do szeroko rozumianej analizy i przetwarzania danych, skorzystają z tego szkolenia. Skupia się on na współczesnych konceptach, narzędziach oraz praktykach które są kluczowe do tworzenia wydajnych, niezawodnych oraz łatwych w utrzymaniu rozwiązań wykorzystując Python’a.
Osoby posiadające podstawową wiedzę i umiejętności związane z Python’em powinny bez problemu zrozumieć treści kursu. Dla osób które dopiero zaczynają programować w Python’ie może być konieczne wykonanie pewnej dodatkowej pracy wstępnej.
Zawartość tego kursu pokrywa zaawansowane i nowe funkcjonalności dostępne w wersji 3.9 Python’a.
Dla kogo jest to szkolenie?
- Programiści/Developerzy Python
- Web developerzy
- Data Scientists
- Analitycy wykorzystujący Python
- Naukowcy
Czego się nauczę?
- Poznasz sposoby na tworzenie odpornego kodu na błędy
- Nauczysz się dobrych praktyk tworzenia kodu w Python
- Dowiesz się jak tworzyć moduły I pakietować je
- Nauczysz się tworzyć dokumentacje dla tworzonych rozwiązań
- Poznasz zaawansowane narzędzia i obiekty w Python wykorzystywane do tworzenia wydajnego kodu
- Poznasz zaawansowane aspekty programowania obiektowego w Python
- Dowiesz się jak tworzyć wydajne oprogramowanie wykorzystujące m.in. przetwarzanie wielowątkowe
Plan szkolenia
Odporność na błędy w Python’ie
- Python wiadomości o błędach
- Zapobieganie błędom składniowym z Linters – Pylint, Flake8
- Badanie tracebacks
- Szukanie informacji o błędach
- Obsługa błędów
- Instrukcje try/except/finally
- Zgłaszanie wyjątków – raise
- Obiekty wyjątków
- Efekty wyjątku
- Obsługa wyjątków
- Hierarchia wyjątków
- Niestandardowe wyjątki
- Strategie sprawdzania wyjątków
- Ostrzeżenia
- Moduł warnings
- Kategorie ostrzeżeń
- Filtry ostrzeżeń
- Generowanie ostrzerzeń za pomocą funkcji
- Testowanie
- Zasady projektowania oraz testy jednostkowe
- Testy jednostkowe – standardowe narzędzia do testowania w Python’ie
- Pytest
- Imitowanie obiektów za pomocą atrap
- Rejestrowanie zdarzeń
- Czemu rejestrować?
- Moduł Logging
- Logger – metody, hierarchia
- Formatery
- spacingHandlers
Najlepsze Praktyki, Narzędzia i Techniki w Python’ie
- Wstęp do najlepszych praktyk przy tworzeniu projektów w Python’ie
- Styl kodowania i formatowanie
- Strukturyzowanie projektu
- Testowanie kodu
- Optymalizacja
- Dokumentacja
- Rejestrowanie zdarzeń
- Licencjowanie
- Formatowanie kodu
- PEP 8 – Wytyczne stylu
- Horyzontalne, wertykalne spacjowanie
- Black – formater kodu
- Konwencje nazewnictwa
- PEP 8 – Konwencja nazewnictwa
- Z małej czy z dużej litery
- Odpowiednia długość nazwy
- Wbudowane nazwy
- Najlepsze praktyki dla argumentów
- Nazwy klas, modułów oraz pakietów
- Pylint, flake8
- Pythonowy sposób pisania kodu
- Wcięcia są znaczące
- Łańcuch przypisań i operatory porównania
- Trwałość i Serializacja
- Zrozumienie trwałości
- Serializacja – konwersja pliku na strumień bitów
- Dumping i ładowania za pomocą:
- JSON
- YAML
- Pickle
- XML
- Moduły
- Architektura programu w Python
- Koncepty planowania modułów
- Obiekty modułowe
- Instrukcje import i from i ich konsekwencje
- Atrybuty obiektów modułu
- Moduły wbudowane w Python 3.9
- Dokumentacja modułów
- Prywatne zmienne w module
- Ładowanie modułów
- Przeszukiwanie systemu plików
- Główny program
- Ponowne ładowanie modułów
- Importy okrężne
- Kompilacja kodu bitowego __pycache__
- Scieżka wyszukania modułu w Python’ie
- Przestrzeń nazw modułów
- Zaawansowane elementy związane z modułami
- _X i __all__ – ukrywanie danych
- Cechy języka Future z __future__
- Zmienne korzystanie z modes __name__ i__main__
- Pakiety
- Zrozumienie pakietów i modułów
- Korzystanie z importów pakietu
- Względny kontra bezwględny import, scope, zasady wyszukiwania
- Pakiet __init__.py files
- Specjalne atrybuty obiektów pakietu
- Przestrzeń nazw pakietów
- Moduły do pakietowania
- PyPA – Python packaging authority
- Techniczne wymagania i struktura katalogu
- Konfiguracja projektu za pomocą skryptów instalacyjnych, metadaty, manifestu
- Zarządzanie zależnościami
- Praca z pakietami w budowie
- README, DEVELOP, CHANGES
- Dokumentacja projektu
- Zasady pisania technicznego
- Komentowanie kontra dokumentowanie
- Podpowiadanie typów
- Docstrings
- StructuredText
- Generowanie dokumentacji w Python’ie
- Zarządzanie kodem
- System kontroli wersji
- Ciągła integracja
- Narzędzia dla ciągłej integracji
- Jenking
- GitLab CI
Zaawansowane programowanie w Python’ie
- Obiekty wywoływalne
- Typy obiektów wywoływalnych w Python’ie 3.9
- Funkcje jako obiekty pierwszej kategorii
- Typy obiektów wywoływalnych zdefiniowanych przez użytkownika
- Pakiety związane z programowaniem funkcyjnym
- Moduł operator
- Moduł functools (zastępstwo dla map, filtrowania i redukcji)
- Funkcje
- Scope w Python’ie i rozstrzyganie nazw
- Globalne i nielokalne wyrażenia
- Lambdy – funkcje anonimowe
- Parametry wejściowe
- Specyfikacja argumentów wejściowych, pozycyjne, słowa kluczowe
- Parametry wyłącznie pozycyjne
- Parametry wyłącznie oparte na słowach kluczowych
- Zamrażanie argumentów funkcji
- Wartości zwrotne
- Funkcje rekursywne
- PEP 484 – Typy podpowiedzi w funkcjach
- Mypy module
- typing module
- Przydatne typy w adnotacjach
- Pozycyjne i zmienna liczba argumentów parametrów – adnotacje
- Iterowalne, Iteratory i generatory
- Wydajne programowanie z iteratorami
- Protokół iteratorów
- Instrukcje iter() i next()
- Iterowalne kontra Iteratory
- Funkcje generujące i wyrażenia
- Generator wyrażeń
- Funkcja generująca – instrukcja yield()
- Metody generujące – send(), throw(), close()
- Moduł Itertools – wydajne pętle
- Nieskończone iteratory
- Terminowanie iteratorów
- Kombinatoryczne iteratory
- Współprogram
- Nowe funkcjonalności języka Python w wersji 3.5
- Klasyczne współprogramy
- Współprogramy oparte na generatorach
- Rdzenne współprogramy
- Yield od znaczenia do korzystania
- Funkcje wysokiego rzędu
- Narzędzia funkcji wysokiego rzędu
- Moduł Functools
- Dekoratory i Domknięcia
- PEP 318 Dekoratory dla funkcji i metod
- Kiedy Python wykonuje dekoratory
- Implementacja jako funkcje lub klasy
- Zagnieżdżone dekoratory
- Parametryzacja dekoratorów
- Wykorzystanie i aplikacje
- Menadżery kontekstu
- PEP 3483 – Instrukcja with
- Narzędzia modułu Contextlib
- Typy menadżerów kontekstu i metody specjalne
- Aplikacje i wykorzystywanie menadżerów kontekstu
- Elementy współczesnej składni
- Python model danych – protokoły języka Python (metody i atrybuty)
- Klasa Budowniczego z modułu dataclasses – redukcja powtarzania kodu
- Podklasy typów wbudowanych z kolekcjami
- Referencje obiektów, zmienność and recyklowanie
Programowanie obiektowe w Python’ie
- Projektowanie zorientowane obiektowo
- Analiza zorientowana obiektowo
- Definiowanie obiektów i klas
- Określanie atrybutów i zachowań
- Kompozycja
- Dziedziczenie
- Stadium przypadku
- Klasy i obiekty
- Tworzenie i inicjalizacja klasy
- Tworzenie instancji klasy
- Metody instancji
- ABC – Abstrakcyjne klasy bazowe
- Moduł abc
- Projektowanie z obiektami wywołalnymi abc
- Atrybuty
- Deklarowanie i dostęp do atrybutów
- __init__ i atrybuty
- Specjalne metody dla dostępu do atrybutów
- Metoda __getattribute__
- Deskryptory
- Metody
- Specjalne metody
- __repr__ i __str__
- __format__
- __hash__
- __new__
- Metody klasy
- Metody statyczne
- Public i Private
- Specjalne metody
- Dziedziczenie – kiedy obiekty są podobne
- Dziedziczenie klasy
- Przeciążanie i metoda super()
- Definiowanie __init__() dla klasy dziecka
- Wielokrotne dziedziczenie
- MRO – Method Resolution Order
- Polimorfizm
- Przeciążanie operatorów
- Metody magiczne
Wysoce wydajne obliczanie z Python’em
- Profilowanie
- Zasady optymalizacji
- Strategie optymalizacje
- Profilowanie CPU i pamięci
- Optymalizacja
- Struktura danych wpływa na złożoność
- Kolekcje
- Buforowanie
- Numba
- Cython
- Współbieżność
- Współbieżność kontra równoległość (strukturyzowanie kontra robienie)
- Wielowątkowość
- Tworzenie wątków
- Stany wątków
- Funkcje modułu Threading
- Wieloprocesowość
- Moduł multiprocessing
- Klasa Process
- Korzytanie z Pool
- Wymieniane danych pomiędzy procesami
- Dzielenie się stanem pomiędzy procesami
- Programowanie asynchroniczne
- Instrukcje async i await w Python’ie
- Wielozadaniowość i asynchroniczność I/O
- Przykład programowanie asynchronicznego
- Futures
- Potrzeba dla futures
- Tworzenie Futures w Python’ie
- Wiele futures