SPIS TREŚCI
O autorach
O recenzencie
Przedmowa
Rozdział 1. Aktualny stan Pythona
- Gdzie jesteśmy i dokąd zmierzamy?
- Co zrobić z kodem w Pythonie 2?
- Jak być na bieżąco?
- Dokumenty PEP
- Aktywne społeczności
- Inne źródła informacji
- Podsumowanie
Rozdział 2. Nowoczesne środowiska programistyczne Pythona
- Wymagania techniczne
- Ekosystem pakietów Pythona
- Instalowanie pakietów Pythona za pomocą narzędzia pip
- Izolowanie środowiska uruchomieniowego
- Izolacja na poziomie aplikacji a izolacja na poziomie systemu
- Izolacja środowiska na poziomie aplikacji
- Poetry jako system zarządzania zależnościami
- Izolacja środowiska na poziomie systemu
- Konteneryzacja a wirtualizacja
- Zarządzanie środowiskami wirtualnymi z użyciem Dockera
- Wirtualne środowiska programistyczne oparte na narzędziu Vagrant
- Popularne narzędzia do zwiększania produktywności
- Niestandardowe powłoki Pythona
- Stosowanie powłoki IPython
- Stosowanie powłok we własnych skryptach i programach
- Interaktywne debugery
- Inne narzędzia do zwiększania produktywności
- Podsumowanie
Rozdział 3. Nowości w Pythonie
- Wymagania techniczne
- Niedawne dodatki do języka
- Operatory scalania i aktualizacji słownika
- Wyrażenia przypisania
- Wskazówki dotyczące typów w typach generycznych
- Parametry czysto pozycyjne
- Moduł zoneinfo
- Moduł graphlib
- Nie tak nowe, ale wciąż błyszczące
- Funkcja breakpoint()
- Tryb roboczy
- Funkcje __getattr__() i __dir__() na poziomie modułu
- Formatowanie łańcuchów znaków za pomocą obiektów f-string
- Podkreślenia w literałach liczbowych
- Moduł secrets
- Co może się pojawić w przyszłości?
- Tworzenie sumy typów za pomocą operatora |
- Strukturalne dopasowywanie wzorców
- Podsumowanie
Rozdział 4. Porównanie Pythona z innymi językami
- Wymagania techniczne
- Model klas i programowanie obiektowe
- Dostęp do klas bazowych
- Wielodziedziczenie i porządek MRO
- Inicjalizowanie instancji klasy
- Wzorce dostępu do atrybutów
- Deskryptory
- Właściwości
- Dynamiczny polimorfizm
- Przeciążanie operatorów
- Przeciążanie funkcji i metod
- Klasy danych
- Programowanie funkcyjne
- Funkcje lambda
- Funkcje map(), filter() i reduce()
- Obiekty i funkcje częściowe
- Generatory
- Wyrażenia generatora
- Dekoratory
- Wyliczenia
- Podsumowanie
Rozdział 5. Interfejs, wzorce i modułowość
- Wymagania techniczne
- Interfejsy
- Odrobina historii: zope.interface
- Stosowanie adnotacji funkcji i abstrakcyjnych klas bazowych
- Tworzenie interfejsów z wykorzystaniem adnotacji określających typ
- Odwrócenie sterowania i wstrzykiwanie zależności
- Odwrócenie sterowania w aplikacjach
- Stosowanie platform do wstrzykiwania zależności
- Podsumowanie
Rozdział 6. Współbieżność
- Wymagania techniczne
- Czym jest współbieżność?
- Wielowątkowość
- Czym jest wielowątkowość?
- Obsługa wątków w Pythonie
- Kiedy należy stosować wielowątkowość?
- Przykładowa aplikacja wielowątkowa
- Wieloprocesowość
- Wbudowany moduł multiprocessing
- Stosowanie puli procesów
- Stosowanie modułu multiprocessing.dummy jako interfejsu do obsługi wielowątkowości
- Programowanie asynchroniczne
- Kooperatywna wielozadaniowość i asynchroniczne operacje wejścia – wyjścia
- Słowa kluczowe async i await w Pythonie
- Praktyczny przykład zastosowania programowania asynchronicznego
- Dostosowywanie nieasynchronicznego kodu do asynchroniczności za pomocą obiektów future
- Podsumowanie
Rozdział 7. Programowanie sterowane zdarzeniami
- Wymagania techniczne
- Czym dokładnie jest programowanie sterowane zdarzeniami?
- Sterowanie zdarzeniami nie jest tożsame z asynchronicznością
- Programowanie sterowane zdarzeniami w GUI
- Komunikacja sterowana zdarzeniami
- Różne style programowania sterowanego zdarzeniami
- Styl oparty na wywołaniach zwrotnych
- Styl oparty na obserwowaniu obiektów
- Styl oparty na tematach
- Architektury sterowane zdarzeniami
- Kolejki zdarzeń i komunikatów
- Podsumowanie
Rozdział 8. Elementy metaprogramowania
- Wymagania techniczne
- Czym jest metaprogramowanie?
- Stosowanie dekoratorów do modyfikowania działania funkcji przed jej użyciem
- Następny krok: dekoratory klas
- Przechwytywanie procesu tworzenia instancji klasy
- Metaklasy
- Ogólna składnia
- Stosowanie metaklas
- Pułapki związane z metaklasami
- Stosowanie metody __init_subclass__() jako alternatywy dla metaklas
- Generowanie kodu
- Funkcje exec, eval i compile
- Drzewa składni abstrakcyjnej
- Haczyki importu
- Ważne przykłady generowania kodu w Pythonie
- Podsumowanie
Rozdział 9. Łączenie Pythona z kodem w C i C++
- Wymagania techniczne
- C i C++ jako podstawa rozszerzalności w Pythonie
- Kompilowanie i wczytywanie w Pythonie rozszerzeń napisanych w C
- Kiedy należy używać rozszerzeń?
- Zwiększanie wydajności kluczowych fragmentów kodu
- Integrowanie istniejącego kodu napisanego w różnych językach
- Integrowanie zewnętrznych bibliotek dynamicznych
- Tworzenie wydajnych niestandardowych typów danych
- Pisanie rozszerzeń
- Rozszerzenia w czystym C
- Pisanie rozszerzeń za pomocą Cythona
- Wady korzystania z rozszerzeń
- Dodatkowa złożoność
- Trudniejsze debugowanie
- Komunikacja z bibliotekami dynamicznymi bez używania rozszerzeń
- Moduł ctypes
- CFFI
- Podsumowanie
Rozdział 10. Automatyzacja testów i kontroli jakości
- Wymagania techniczne
- Zasady programowania sterowanego testami
- Pisanie testów z użyciem platformy pytest
- Parametryzacja testów
- Konfiguracje testów w platformie pytest
- Stosowanie „fałszywych” obiektów
- Atrapy i moduł unittest.mock
- Automatyzacja kontroli jakości
- Pokrycie kodu testami
- Narzędzia do poprawiania stylu i lintery
- Statyczna analiza typów
- Testowanie mutacyjne
- Przydatne narzędzia związane z testami
- Generowanie realistycznych danych
- Generowanie dat i czasu
- Podsumowanie
Rozdział 11. Tworzenie pakietów i udostępnianie kodu w Pythonie
- Wymagania techniczne
- Tworzenie pakietów bibliotek i ich udostępnianie
- Budowa pakietu Pythona
- Rodzaje dystrybucji pakietów
- Rejestrowanie i publikowanie pakietów
- Wersjonowanie pakietów i zarządzanie zależnościami
- Instalowanie własnych pakietów
- Pakiety przestrzeni nazw
- Skrypty i punkty wejścia w pakietach
- Tworzenie pakietów aplikacji i usług do użytku w internecie
- Manifest Twelve-Factor App
- Korzystanie z Dockera
- Zarządzanie zmiennymi środowiskowymi
- Rola zmiennych środowiskowych w platformach do tworzenia aplikacji
- Tworzenie samodzielnych aplikacji wykonywalnych
- Kiedy samodzielne aplikacje wykonywalne są przydatne?
- Popularne narzędzia
- Bezpieczeństwo kodu Pythona w pakietach wykonywalnych
- Podsumowanie
Rozdział 12. Monitorowanie pracy i wydajności aplikacji
- Wymagania techniczne
- Rejestrowanie błędów i logów
- Podstawy rejestrowania logów w Pythonie
- Zalecane praktyki z obszaru rejestrowania logów
- Rozproszone rejestrowanie logów
- Rejestrowanie błędów w celu ich późniejszej analizy
- Instrumentacja kodu z wykorzystaniem niestandardowych wskaźników
- Stosowanie aplikacji Prometheus
- Śledzenie rozproszone aplikacji
- Śledzenie rozproszone za pomocą Jaegera
- Podsumowanie
Rozdział 13. Optymalizacja kodu
- Wymagania techniczne
- Częste przyczyny niskiej wydajności
- Złożoność kodu
- Nadmierne wykorzystanie zasobów i ich wyciekanie
- Nadmierna liczba operacji wejścia – wyjścia i operacji blokujących
- Profilowanie kodu
- Profilowanie procesora
- Profilowanie wykorzystania pamięci
- Zmniejszanie złożoności przez wybór odpowiednich struktur danych
- Przeszukiwanie listy
- Stosowanie zbiorów
- Stosowanie modułu collections
- Architektoniczne kompromisy
- Stosowanie heurystyk i algorytmów aproksymacyjnych
- Stosowanie kolejek zadań i przetwarzania odroczonego
- Stosowanie probabilistycznych struktur danych
- Zapisywanie wyników w pamięci podręcznej
- Podsumowanie
Skorowidz
Opinie
Na razie nie ma opinii o produkcie.