You are previewing Python. Receptury. Wydanie III.
O'Reilly logo
Python. Receptury. Wydanie III

Book Description

Python to język programowania z ponad 20-letnią historią. Opracowany na początku lat 90. ubiegłego wieku, błyskawicznie zdobył sympatię programistów. Jest używany zarówno do pisania przydatnych skryptów czy małych narzędzi, jak i do pracy nad dużymi projektami. Korzysta z automatycznego zarządzania pamięcią oraz pozwala na podejście obiektowe i funkcyjne do tworzonego programu. Wokół języka Python skupiona jest bardzo silna społeczność programistów. Ta książka to sprawdzone źródło informacji na temat Pythona i jego najczęstszych zastosowań. Należy ona do cenionej serii Receptury, w której znajdziesz najlepsze sposoby rozwiązywania problemów. Przekonaj się, jak wydajnie operować na strukturach danych, łańcuchach znaków, tekście i liczbach. Zobacz, jak korzystać z iteratorów i generatorów. Ponadto naucz się tworzyć własne klasy i funkcje oraz sprawdź, jak uzyskać dostęp do plików i sieci. Te i dziesiątki innych receptur opisano w tej książce. To obowiązkowa pozycja na półce każdego programisty pracującego z językiem Python.Dzięki tej książce: poznasz podstawy języka Python rozwiążesz w optymalny sposób najczęstsze problemy napiszesz program korzystający z puli wątków będziesz lepszym programistą Pythona! Najlepsze rozwiązania typowych problemów!

Table of Contents

  1. Przedmowa
    1. Dla kogo przeznaczona jest ta książka
    2. Dla kogo ta książka nie jest przeznaczona
    3. Konwencje stosowane w tej książce
    4. Przykładowy kod w internecie
    5. Korzystanie z przykładowego kodu
    6. Podziękowania
      1. Podziękowania od Davida Beazley’a
      2. Podziękowania od Briana Jonesa
  2. 1. Algorytmy i struktury danych
    1. 1.1. Wypakowywanie sekwencji do odrębnych zmiennych
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    2. 1.2. Wypakowywanie elementów z obiektów iterowalnych o dowolnej długości
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    3. 1.3. Zachowywanie ostatnich N elementów
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    4. 1.4. Wyszukiwanie N największych lub najmniejszych elementów
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    5. 1.5. Tworzenie kolejki priorytetowej
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    6. 1.6. Odwzorowywanie kluczy na różne wartości ze słownika
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    7. 1.7. Określanie uporządkowania w słownikach
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    8. 1.8. Obliczenia na danych ze słowników
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    9. 1.9. Wyszukiwanie identycznych danych w dwóch słownikach
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    10. 1.10. Usuwanie powtórzeń z sekwencji przy zachowaniu kolejności elementów
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    11. 1.11. Nazywanie wycinków
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    12. 1.12. Określanie najczęściej występujących w sekwencji elementów
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    13. 1.13. Sortowanie list słowników według wspólnych kluczy
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    14. 1.14. Sortowanie obiektów bez wbudowanej obsługi porównań
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    15. 1.15. Grupowanie rekordów na podstawie wartości pola
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    16. 1.16. Filtrowanie elementów sekwencji
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    17. 1.17. Pobieranie podzbioru słownika
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    18. 1.18. Odwzorowywanie nazw na elementy sekwencji
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    19. 1.19. Jednoczesne przekształcanie i redukowanie danych
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    20. 1.20. Łączenie wielu odwzorowań w jedno
      1. Problem
      2. Rozwiązanie
      3. Omówienie
  3. 2. Łańcuchy znaków i tekst
    1. 2.1. Podział łańcuchów znaków po wykryciu dowolnego z różnych ograniczników
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    2. 2.2. Dopasowywanie tekstu do początkowej lub końcowej części łańcucha znaków
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    3. 2.3. Dopasowywanie łańcuchów znaków za pomocą symboli wieloznacznych powłoki
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    4. 2.4. Dopasowywanie i wyszukiwanie wzorców tekstowych
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    5. 2.5. Wyszukiwanie i zastępowanie tekstu
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    6. 2.6. Wyszukiwanie i zastępowanie tekstu bez uwzględniania wielkości liter
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    7. 2.7. Tworzenie wyrażeń regularnych w celu uzyskania najkrótszego dopasowania
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    8. 2.8. Tworzenie wyrażeń regularnych dopasowywanych do wielowierszowych wzorców
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    9. 2.9. Przekształcanie tekstu w formacie Unicode na postać standardową
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    10. 2.10. Używanie znaków Unicode w wyrażeniach regularnych
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    11. 2.11. Usuwanie niepożądanych znaków z łańcuchów
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    12. 2.12. Zapewnianie poprawności i porządkowanie tekstu
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    13. 2.13. Wyrównywanie łańcuchów znaków
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    14. 2.14. Łączenie łańcuchów znaków
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    15. 2.15. Podstawianie wartości za zmienne w łańcuchach znaków
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    16. 2.16. Formatowanie tekstu w celu uzyskania określonej liczby kolumn
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    17. 2.17. Obsługiwanie encji HTML-a i XML-a w tekście
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    18. 2.18. Podział tekstu na tokeny
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    19. 2.19. Tworzenie prostego rekurencyjnego parsera zstępującego
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    20. 2.20. Przeprowadzanie operacji tekstowych na łańcuchach bajtów
      1. Problem
      2. Rozwiązanie
      3. Omówienie
  4. 3. Liczby, daty i czas
    1. 3.1. Zaokrąglanie liczb
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    2. 3.2. Przeprowadzanie dokładnych obliczeń na liczbach dziesiętnych
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    3. 3.3. Formatowanie liczb w celu ich wyświetlenia
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    4. 3.4. Stosowanie dwójkowych, ósemkowych i szesnastkowych liczb całkowitych
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    5. 3.5. Pakowanie do bajtów i wypakowywanie z bajtów dużych liczb całkowitych
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    6. 3.6. Przeprowadzanie obliczeń na liczbach zespolonych
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    7. 3.7. Nieskończoność i wartości NaN
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    8. 3.8. Obliczenia z wykorzystaniem ułamków
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    9. 3.9. Obliczenia z wykorzystaniem dużych tablic liczbowych
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    10. 3.10. Przeprowadzanie operacji na macierzach i z zakresu algebry liniowej
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    11. 3.11. Losowe pobieranie elementów
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    12. 3.12. Przekształcanie dni na sekundy i inne podstawowe konwersje związane z czasem
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    13. 3.13. Określanie daty ostatniego piątku
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    14. 3.14. Określanie przedziału dat odpowiadającego bieżącemu miesiącowi
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    15. 3.15. Przekształcanie łańcuchów znaków na obiekty typu datetime
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    16. 3.16. Manipulowanie datami z uwzględnieniem stref czasowych
      1. Problem
      2. Rozwiązanie
      3. Omówienie
  5. 4. Iteratory i generatory
    1. 4.1. Ręczne korzystanie z iteratora
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    2. 4.2. Delegowanie procesu iterowania
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    3. 4.3. Tworzenie nowych wzorców iterowania z wykorzystaniem generatorów
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    4. 4.4. Implementowanie protokołu iteratora
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    5. 4.5. Iterowanie w odwrotnej kolejności
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    6. 4.6. Definiowanie funkcji generatorów z dodatkowym stanem
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    7. 4.7. Pobieranie wycinków danych zwracanych przez iterator
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    8. 4.8. Pomijanie pierwszej części obiektu iterowalnego
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    9. 4.9. Iterowanie po wszystkich możliwych kombinacjach lub permutacjach
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    10. 4.10. Przechodzenie po parach indeks – wartość sekwencji
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    11. 4.11. Jednoczesne przechodzenie po wielu sekwencjach
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    12. 4.12. Przechodzenie po elementach z odrębnych kontenerów
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    13. 4.13. Tworzenie potoków przetwarzania danych
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    14. 4.14. Przekształcanie zagnieżdżonych sekwencji na postać jednowymiarową
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    15. 4.15. Przechodzenie po scalonych posortowanych obiektach iterowalnych zgodnie z kolejnością sortowania
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    16. 4.16. Zastępowanie nieskończonych pętli while iteratorem
      1. Problem
      2. Rozwiązanie
      3. Omówienie
  6. 5. Pliki i operacje wejścia-wyjścia
    1. 5.1. Odczyt i zapis danych tekstowych
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    2. 5.2. Zapisywanie danych z funkcji print() do pliku
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    3. 5.3. Stosowanie niestandardowych separatorów lub końca wiersza w funkcji print()
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    4. 5.4. Odczyt i zapis danych binarnych
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    5. 5.5. Zapis danych do pliku, który nie istnieje
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    6. 5.6. Wykonywanie operacji wejścia-wyjścia na łańcuchach
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    7. 5.7. Odczytywanie i zapisywanie skompresowanych plików z danymi
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    8. 5.8. Przechodzenie po rekordach o stałej wielkości
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    9. 5.9. Wczytywanie danych binarnych do zmiennego bufora
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    10. 5.10. Odwzorowywanie plików binarnych w pamięci
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    11. 5.11. Manipulowanie ścieżkami
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    12. 5.12. Sprawdzanie, czy plik istnieje
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    13. 5.13. Pobieranie listy zawartości katalogu
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    14. 5.14. Nieuwzględnianie kodowania nazw plików
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    15. 5.15. Wyświetlanie nieprawidłowych nazw plików
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    16. 5.16. Dodawanie lub zmienianie kodowania otwartego pliku
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    17. 5.17. Zapisywanie bajtów w pliku tekstowym
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    18. 5.18. Umieszczanie deskryptora istniejącego pliku w obiekcie pliku
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    19. 5.19. Tworzenie tymczasowych plików i katalogów
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    20. 5.20. Komunikowanie z portami szeregowymi
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    21. 5.21. Serializowanie obiektów Pythona
      1. Problem
      2. Rozwiązanie
      3. Omówienie
  7. 6. Kodowanie i przetwarzanie danych
    1. 6.1. Wczytywanie i zapisywanie danych CSV
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    2. 6.2. Wczytywanie i zapisywanie danych w formacie JSON
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    3. 6.3. Parsowanie prostych danych w XML-u
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    4. 6.4. Stopniowe parsowanie bardzo dużych plików XML
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    5. 6.5. Przekształcanie słowników na format XML
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    6. 6.6. Parsowanie, modyfikowanie i ponowne zapisywanie dokumentów XML
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    7. 6.7. Parsowanie dokumentów XML z przestrzeniami nazw
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    8. 6.8. Komunikowanie się z relacyjnymi bazami danych
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    9. 6.9. Dekodowanie i kodowanie cyfr w systemie szesnastkowym
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    10. 6.10. Dekodowanie i kodowanie wartości w formacie Base64
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    11. 6.11. Odczyt i zapis tablic binarnych zawierających struktury
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    12. 6.12. Wczytywanie zagnieżdżonych struktur binarnych o zmiennej długości
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    13. 6.13. Podsumowywanie danych i obliczanie statystyk
      1. Problem
      2. Rozwiązanie
      3. Omówienie
  8. 7. Funkcje
    1. 7.1. Pisanie funkcji przyjmujących dowolną liczbę argumentów
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    2. 7.2. Tworzenie funkcji przyjmujących argumenty podawane wyłącznie za pomocą słów kluczowych
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    3. 7.3. Dołączanie metadanych z informacjami do argumentów funkcji
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    4. 7.4. Zwracanie wielu wartości przez funkcje
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    5. 7.5. Definiowanie funkcji z argumentami domyślnymi
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    6. 7.6. Definiowanie funkcji anonimowych (wewnątrzwierszowych)
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    7. 7.7. Pobieranie wartości zmiennych w funkcjach anonimowych
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    8. 7.8. Uruchamianie n-argumentowej jednostki wywoływalnej z mniejszą liczbą argumentów
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    9. 7.9. Zastępowanie klas z jedną metodą funkcjami
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    10. 7.10. Dodatkowy stan w funkcjach wywoływanych zwrotnie
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    11. 7.11. Wewnątrzwierszowe zapisywanie wywoływanych zwrotnie funkcji
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    12. 7.12. Dostęp do zmiennych zdefiniowanych w domknięciu
      1. Problem
      2. Rozwiązanie
      3. Omówienie
  9. 8. Klasy i obiekty
    1. 8.1. Modyfikowanie tekstowej reprezentacji obiektów
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    2. 8.2. Modyfikowanie formatowania łańcuchów znaków
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    3. 8.3. Dodawanie do obiektów obsługi protokołu zarządzania kontekstem
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    4. 8.4. Zmniejszanie zużycia pamięci przy tworzeniu dużej liczby obiektów
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    5. 8.5. Hermetyzowanie nazw w klasie
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    6. 8.6. Tworzenie atrybutów zarządzanych
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    7. 8.7. Wywoływanie metod klasy bazowej
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    8. 8.8. Rozszerzanie właściwości w klasie pochodnej
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    9. 8.9. Tworzenie nowego rodzaju atrybutów klasy lub egzemplarza
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    10. 8.10. Stosowanie właściwości obliczanych w leniwy sposób
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    11. 8.11. Upraszczanie procesu inicjowania struktur danych
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    12. 8.12. Definiowanie interfejsu lub abstrakcyjnej klasy bazowej
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    13. 8.13. Tworzenie modelu danych lub systemu typów
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    14. 8.14. Tworzenie niestandardowych kontenerów
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    15. 8.15. Delegowanie obsługi dostępu do atrybutów
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    16. 8.16. Definiowanie więcej niż jednego konstruktora w klasie
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    17. 8.17. Tworzenie obiektów bez wywoływania metody __init__()
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    18. 8.18. Rozszerzanie klas za pomocą klas mieszanych
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    19. 8.19. Implementowanie obiektów ze stanem lub maszyn stanowych
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    20. 8.20. Wywoływanie metod obiektu na podstawie nazwy w łańcuchu znaków
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    21. 8.21. Implementowanie wzorca odwiedzający
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    22. 8.22. Implementowanie wzorca odwiedzający bez stosowania rekurencji
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    23. 8.23. Zarządzanie pamięcią w cyklicznych strukturach danych
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    24. 8.24. Tworzenie klas z obsługą porównań
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    25. 8.25. Tworzenie obiektów zapisywanych w pamięci podręcznej
      1. Problem
      2. Rozwiązanie
      3. Omówienie
  10. 9. Metaprogramowanie
    1. 9.1. Tworzenie nakładek na funkcje
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    2. 9.2. Zachowywanie metadanych funkcji przy pisaniu dekoratorów
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    3. 9.3. Pobieranie pierwotnej funkcji z nakładki
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    4. 9.4. Tworzenie dekoratorów przyjmujących argumenty
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    5. 9.5. Definiowanie dekoratora z atrybutami dostosowywanymi przez użytkownika
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    6. 9.6. Definiowanie dekoratorów przyjmujących opcjonalny argument
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    7. 9.7. Wymuszanie sprawdzania typów w funkcji za pomocą dekoratora
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    8. 9.8. Definiowanie dekoratorów jako elementów klasy
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    9. 9.9. Definiowanie dekoratorów jako klas
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    10. 9.10. Stosowanie dekoratorów do metod klasy i metod statycznych
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    11. 9.11. Pisanie dekoratorów, które dodają argumenty do funkcji w nakładkach
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    12. 9.12. Stosowanie dekoratorów do poprawiania definicji klas
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    13. 9.13. Używanie metaklasy do kontrolowania tworzenia obiektów
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    14. 9.14. Sprawdzanie kolejności definiowania atrybutów klasy
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    15. 9.15. Definiowanie metaklas przyjmujących argumenty opcjonalne
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    16. 9.16. Sprawdzanie sygnatury na podstawie argumentów *args i **kwargs
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    17. 9.17. Wymuszanie przestrzegania konwencji pisania kodu w klasie
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    18. 9.18. Programowe definiowanie klas
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    19. 9.19. Inicjowanie składowych klasy w miejscu definicji klasy
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    20. 9.20. Przeciążanie metod z wykorzystaniem uwag do funkcji
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    21. 9.21. Unikanie powtarzających się metod właściwości
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    22. 9.22. Definiowanie w łatwy sposób menedżerów kontekstu
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    23. 9.23. Wykonywanie kodu powodującego lokalne efekty uboczne
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    24. 9.24. Parsowanie i analizowanie kodu źródłowego Pythona
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    25. 9.25. Dezasemblacja kodu bajtowego Pythona
      1. Problem
      2. Rozwiązanie
      3. Omówienie
  11. 10. Moduły i pakiety
    1. 10.1. Tworzenie hierarchicznych pakietów z modułami
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    2. 10.2. Kontrolowanie importowania wszystkich symboli
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    3. 10.3. Importowanie modułów podrzędnych z pakietu za pomocą nazw względnych
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    4. 10.4. Podział modułu na kilka plików
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    5. 10.5. Tworzenie odrębnych katalogów z importowanym kodem z jednej przestrzeni nazw
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    6. 10.6. Ponowne wczytywanie modułów
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    7. 10.7. Umożliwianie wykonywania kodu z katalogu lub pliku zip jako głównego skryptu
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    8. 10.8. Wczytywanie pliku z danymi z pakietu
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    9. 10.9. Dodawanie katalogów do zmiennej sys.path
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    10. 10.10. Importowanie modułów na podstawie nazwy z łańcucha znaków
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    11. 10.11. Wczytywanie modułów ze zdalnego komputera z wykorzystaniem haków w poleceniu importu
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    12. 10.12. Modyfikowanie modułów w trakcie importowania
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    13. 10.13. Instalowanie pakietów tylko na własny użytek
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    14. 10.14. Tworzenie nowego środowiska Pythona
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    15. 10.15. Rozpowszechnianie pakietów
      1. Problem
      2. Rozwiązanie
      3. Omówienie
  12. 11. Sieci i rozwijanie aplikacji sieciowych
    1. 11.1. Interakcja z usługami HTTP za pomocą kodu klienta
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    2. 11.2. Tworzenie serwera TCP
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    3. 11.3. Tworzenie serwera UDP
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    4. 11.4. Generowanie przedziałów adresów IP na podstawie adresu CIDR
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    5. 11.5. Tworzenie prostego interfejsu opartego na architekturze REST
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    6. 11.6. Obsługa prostych zdalnych wywołań procedur za pomocą protokołu XML-RPC
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    7. 11.7. Prosta komunikacja między interpreterami
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    8. 11.8. Implementowanie zdalnych wywołań procedur
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    9. 11.9. Proste uwierzytelnianie klientów
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    10. 11.10. Dodawanie obsługi protokołu SSL do usług sieciowych
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    11. 11.11. Przekazywanie deskryptora pliku gniazda między procesami
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    12. 11.12. Operacje wejścia-wyjścia sterowane zdarzeniami
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    13. 11.13. Wysyłanie i odbieranie dużych tablic
      1. Problem
      2. Rozwiązanie
      3. Omówienie
  13. 12. Współbieżność
    1. 12.1. Uruchamianie i zatrzymywanie wątków
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    2. 12.2. Ustalanie, czy wątek rozpoczął pracę
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    3. 12.3. Komunikowanie się między wątkami
      1. Problem
      2. Omówienie
    4. 12.4. Blokowanie sekcji krytycznej
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    5. 12.5. Blokowanie z unikaniem zakleszczenia
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    6. 12.6. Zapisywanie stanu wątku
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    7. 12.7. Tworzenie puli wątków
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    8. 12.8. Proste programowanie równoległe
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    9. 12.9. Jak radzić sobie z mechanizmem GIL (i przestać się nim martwić)
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    10. 12.10. Definiowanie zadań działających jak aktory
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    11. 12.11. Przesyłanie komunikatów w modelu publikuj-subskrybuj
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    12. 12.12. Używanie generatorów zamiast wątków
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    13. 12.13. Odpytywanie wielu kolejek wątków
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    14. 12.14. Uruchamianie procesu demona w systemie Unix
      1. Problem
      2. Rozwiązanie
      3. Omówienie
  14. 13. Skrypty narzędziowe i zarządzanie systemem
    1. 13.1. Przyjmowanie danych wejściowych skryptu za pomocą przekierowań, potoków lub plików wejściowych
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    2. 13.2. Kończenie pracy programu wyświetleniem komunikatu o błędzie
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    3. 13.3. Parsowanie opcji z wiersza poleceń
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    4. 13.4. Prośba o podanie hasła w czasie wykonywania programu
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    5. 13.5. Pobieranie rozmiarów terminala
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    6. 13.6. Wywoływanie zewnętrznych poleceń i pobieranie danych wyjściowych
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    7. 13.7. Kopiowanie lub przenoszenie plików i katalogów
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    8. 13.8. Tworzenie i wypakowywanie archiwów
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    9. 13.9. Wyszukiwanie plików na podstawie nazwy
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    10. 13.10. Wczytywanie plików konfiguracyjnych
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    11. 13.11. Dodawanie mechanizmu rejestrowania operacji do prostych skryptów
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    12. 13.12. Dodawanie obsługi rejestrowania do bibliotek
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    13. 13.13. Tworzenie stopera
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    14. 13.14. Określanie limitów wykorzystania pamięci i procesora
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    15. 13.15. Uruchamianie przeglądarki internetowej
      1. Problem
      2. Rozwiązanie
      3. Omówienie
  15. 14. Testowanie, debugowanie i wyjątki
    1. 14.1. Testowanie danych wyjściowych wysyłanych do strumienia stdout
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    2. 14.2. Podstawianie obiektów w testach jednostkowych
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    3. 14.3. Sprawdzanie wystąpienia wyjątków w testach jednostkowych
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    4. 14.4. Zapisywanie danych wyjściowych testu w pliku
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    5. 14.5. Pomijanie testów lub przewidywanie ich niepowodzenia
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    6. 14.6. Obsługa wielu wyjątków
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    7. 14.7. Przechwytywanie wszystkich wyjątków
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    8. 14.8. Tworzenie niestandardowych wyjątków
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    9. 14.9. Zgłaszanie wyjątku w odpowiedzi na wystąpienie innego wyjątku
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    10. 14.10. Ponowne zgłaszanie ostatniego wyjątku
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    11. 14.11. Wyświetlanie komunikatów ostrzegawczych
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    12. 14.12. Debugowanie prostych awarii programu
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    13. 14.13. Profilowanie i pomiar czasu pracy programów
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    14. 14.14. Przyspieszanie działania programów
      1. Problem
      2. Rozwiązanie
        1. Stosowanie funkcji
        2. Wybiórcze eliminowanie operacji dostępu do atrybutów
        3. Zmienne lokalne
        4. Unikanie niepotrzebnej abstrakcji
        5. Stosowanie wbudowanych kontenerów
        6. Unikanie tworzenia niepotrzebnych struktur danych i kopii
      3. Omówienie
  16. 15. Rozszerzenia w języku C
    1. 15.1. Dostęp do kodu w języku C za pomocą modułu ctypes
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    2. 15.2. Pisanie prostych modułów rozszerzeń w języku C
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    3. 15.3. Pisanie funkcji rozszerzeń manipulujących tablicami
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    4. 15.4. Zarządzanie nieprzejrzystymi wskaźnikami w modułach rozszerzeń w języku C
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    5. 15.5. Definiowanie i eksportowanie interfejsów API języka C w modułach rozszerzeń
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    6. 15.6. Wywoływanie kodu Pythona w kodzie w języku C
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    7. 15.7. Zwalnianie blokady GIL w rozszerzeniach w języku C
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    8. 15.8. Jednoczesne wykonywanie wątków z kodu w językach C i Python
      1. Problem
      2. Rozwiązania
      3. Omówienie
    9. 15.9. Umieszczanie kodu w języku C w nakładkach opartych na narzędziu Swig
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    10. 15.10. Używanie Cythona do tworzenia nakładek na istniejący kod w języku C
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    11. 15.11. Używanie Cythona do pisania wydajnych operacji na tablicach
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    12. 15.12. Przekształcanie wskaźnika do funkcji w jednostkę wywoływalną
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    13. 15.13. Przekazywanie łańcuchów znaków zakończonych symbolem NULL do bibliotek języka C
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    14. 15.14. Przekazywanie łańcuchów znaków Unicode do bibliotek języka C
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    15. 15.15. Przekształcanie łańcuchów znaków z języka C na ich odpowiedniki z Pythona
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    16. 15.16. Używanie łańcuchów znaków o nieznanym kodowaniu pobieranych z języka C
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    17. 15.17. Przekazywanie nazw plików do rozszerzeń w języku C
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    18. 15.18. Przekazywanie otwartych plików do rozszerzeń w języku C
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    19. 15.19. Wczytywanie w języku C danych z obiektów podobnych do plików
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    20. 15.20. Pobieranie obiektów iterowalnych w języku C
      1. Problem
      2. Rozwiązanie
      3. Omówienie
    21. 15.21. Diagnozowanie błędów segmentacji
      1. Problem
      2. Rozwiązanie
      3. Omówienie
  17. A. Dalsza lektura
    1. Zasoby internetowe
    2. Książki do nauki Pythona
    3. Książki dla zaawansowanych
  18. B. O autorach
  19. Indeks
  20. Kolofon
  21. Copyright