E-book details

Python. Wprowadzenie. Wydanie V

Python. Wprowadzenie. Wydanie V

Mark Lutz

Ebook

Python jest wieloparadygmatowym, wszechstronnym językiem programowania, zoptymalizowanym pod kątem efektywności pracy, czytelności kodu i jakości oprogramowania. Jego popularność rośnie, co wynika z wielości i różnorodności zastosowań oraz z tego, że jest darmowy i łatwo przenośny, można się go szybko nauczyć, a tworzenie kodu Pythona sprawia sporo przyjemności. Wszystkie te cechy dają zespołom deweloperskim strategiczną przewagę w dużych i małych projektach. Aby wykorzystać zalety Pythona, konieczne jest zdobycie solidnych podstaw tego języka, a następnie dogłębne zrozumienie bardziej zaawansowanych koncepcji i porządne ich przećwiczenie podczas pisania własnego kodu.

To kompleksowy podręcznik do nauki programowania w Pythonie. Jego piąte wydanie zostało gruntownie zaktualizowane i rozbudowane o dodatkowe treści. Omówiono tu najnowsze wersje Pythona w liniach 3.X i 2.X, czyli 3.3 i 2.7, i dodano opisy nowych lub rozszerzonych mechanizmów, takich jak obsługa formatu JSON, moduł timeit, pakiet PyPy, metoda os.popen, generatory, rekurencje, słabe referencje, atrybuty i metody __mro__, __iter__, super, __slots__, metaklasy, deskryptory, funkcja random, pakiet Sphinx i wiele innych. W książce znalazło się mnóstwo ćwiczeń, quizów, pomocnych ilustracji oraz przykładów kodu. Jest to kompendium dla każdego, kto chce szybko zacząć programować w Pythonie i tworzyć wydajny kod o wysokiej jakości.

W tej książce przedstawiono między innymi:

  • składnię Pythona i koncepcje związane z iteracjami
  • dokładny opis ważniejszych wbudowanych typów obiektów i ich możliwości
  • struktury programistyczne wyższego poziomu
  • programowanie funkcyjne i programowanie zorientowane obiektowo
  • zaawansowane zagadnienia dla profesjonalistów

Już dziś zacznij pisać znakomity kod w Pythonie!

  • Przedmowa
    • Ekosystem tej książki
    • O niniejszym, piątym wydaniu książki
      • Python 2.x i 3.x kiedyś
      • Python 2.x i 3.x obecnie
      • Omawiamy zarówno wersję 2.x, jak i 3.x
      • Której wersji Pythona powinienem użyć?
    • Wymagania wstępne dla użytkowników tej książki
    • Struktura tej książki
    • Czym nie jest ta książka
      • Ta książka nie jest leksykonem ani przewodnikiem po konkretnych zastosowaniach Pythona
      • To nie jest krótka historia dla ludzi, którzy się spieszą
      • Ta książka jest tak liniowa, jak na to pozwala Python
    • O przykładach zamieszczonych w książce
      • Wersje Pythona
      • Platformy
      • Pobieranie kodów źródłowych dla tej książki
    • Konwencje wykorzystywane w książce
    • Podziękowania
      • Trochę wspomnień
      • Podziękowania dla Pythona
      • Podziękowania osobiste
  • Część I Wprowadzenie
  • Rozdział 1. Pytania i odpowiedzi dotyczące Pythona
    • Dlaczego ludzie używają Pythona?
      • Jakość oprogramowania
      • Wydajność programistów
    • Czy Python jest językiem skryptowym?
    • Jakie są wady języka Python?
    • Kto dzisiaj używa Pythona?
    • Co mogę zrobić za pomocą Pythona?
      • Programowanie systemowe
      • Graficzne interfejsy użytkownika (GUI)
      • Skrypty internetowe
      • Integracja komponentów
      • Programowanie bazodanowe
      • Szybkie prototypowanie
      • Programowanie numeryczne i naukowe
      • I dalej: gry, przetwarzanie obrazu, wyszukiwanie danych, robotyka, Excel
    • Jak Python jest rozwijany i wspierany?
      • Kompromisy związane z modelem open source
    • Jakie są techniczne mocne strony Pythona?
      • Jest zorientowany obiektowo i funkcyjny
      • Jest darmowy
      • Jest przenośny
      • Ma duże możliwości
      • Można go łączyć z innymi językami
      • Jest względnie łatwy w użyciu
      • Jest względnie łatwy do nauczenia się
      • Zawdzięcza swoją nazwę Monty Pythonowi
    • Jak Python wygląda na tle innych języków?
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 2. Jak Python wykonuje programy?
    • Wprowadzenie do interpretera Pythona
    • Wykonywanie programu
      • Z punktu widzenia programisty
      • Z punktu widzenia Pythona
        • Kompilacja kodu bajtowego
        • Maszyna wirtualna Pythona
        • Wpływ na wydajność
        • Wpływ na proces programowania
    • Warianty modeli wykonywania
      • Alternatywne implementacje Pythona
        • CPython standard
        • Jython Python dla języka Java
        • IronPython Python dla .NET
        • Stackless: Python dla programowania współbieżnego
        • PyPy Python dla szybkości i wydajności
      • Narzędzia do optymalizacji działania programu
        • Cython: hybryda Pythona/C
        • Shed Skin: translator języka Python na C ++
        • Psyco oryginalny kompilator JIT
      • Zamrożone pliki binarne
      • Przyszłe możliwości?
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 3. Jak wykonuje się programy?
    • Interaktywny wiersz poleceń
      • Uruchamianie sesji interaktywnej
      • Ścieżka systemowa
      • Nowe opcje systemu Windows w wersji 3.3: PATH, Launcher
      • Gdzie zapisywać programy katalogi z kodem źródłowym
      • Czego nie wpisywać znaki zachęty i komentarze
      • Interaktywne wykonywanie kodu
      • Do czego służy sesja interaktywna
        • Eksperymentowanie
          • Testowanie
      • Uwagi praktyczne wykorzystywanie sesji interaktywnej
        • Wpisywanie instrukcji wielowierszowych
    • Systemowy wiersz poleceń i pliki źródłowe
      • Pierwszy skrypt
      • Wykonywanie plików z poziomu wiersza poleceń powłoki
      • Sposoby użycia wiersza poleceń
      • Uwagi praktyczne wykorzystywanie wierszy poleceń i plików
    • Skrypty wykonywalne w stylu uniksowym #!
      • Podstawy skryptów uniksowych
      • Sztuczka z wyszukiwaniem programu przy użyciu polecenia env w systemie Unix
      • Python 3.3 launcher #! w systemie Windows
    • Klikanie ikon plików
      • Podstawowe zagadnienia związane z klikaniem ikon plików
      • Kliknięcie ikony w systemie Windows
      • Sztuczka z funkcją input
      • Inne ograniczenia programów uruchamianych kliknięciem ikony
    • Importowanie i przeładowywanie modułów
      • Podstawy importowania i przeładowywania modułów
      • Więcej o modułach atrybuty
        • Moduły i przestrzenie nazw
      • Uwagi praktyczne instrukcje import i reload
    • Wykorzystywanie funkcji exec do wykonywania plików modułów
    • Interfejs użytkownika środowiska IDLE
      • Szczegóły uruchamiania środowiska IDLE
      • Podstawy środowiska IDLE
      • Wybrane funkcje środowiska IDLE
      • Zaawansowane narzędzia środowiska IDLE
      • Uwagi praktyczne korzystanie ze środowiska IDLE
    • Inne środowiska IDE
    • Inne opcje wykonywania kodu
      • Osadzanie wywołań
      • Zamrożone binarne pliki wykonywalne
      • Uruchamianie kodu z poziomu edytora tekstu
      • Jeszcze inne możliwości uruchamiania
      • Przyszłe możliwości?
    • Jaką opcję wybrać?
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
    • Sprawdź swoją wiedzę ćwiczenia do części pierwszej
  • Część II Typy i operacje
  • Rozdział 4. Wprowadzenie do typów obiektów Pythona
    • Hierarchia pojęć w Pythonie
    • Dlaczego korzystamy z typów wbudowanych
    • Najważniejsze typy danych w Pythonie
    • Liczby
    • Łańcuchy znaków
      • Operacje na sekwencjach
      • Niezmienność
      • Metody specyficzne dla typu
      • Uzyskiwanie pomocy
      • Inne sposoby kodowania łańcuchów znaków
      • Ciągi znaków w formacie Unicode
      • Dopasowywanie wzorców
    • Listy
      • Operacje na typach sekwencyjnych
      • Operacje specyficzne dla typu
      • Sprawdzanie granic
      • Zagnieżdżanie
      • Listy składane
    • Słowniki
      • Operacje na odwzorowaniach
      • Zagnieżdżanie raz jeszcze
      • Brakujące klucze testowanie za pomocą if
      • Sortowanie kluczy pętle for
      • Iteracja i optymalizacja
    • Krotki
      • Do czego służą krotki
    • Pliki
      • Pliki binarne
      • Pliki tekstowe Unicode
      • Inne narzędzia podobne do plików
    • Inne typy podstawowe
      • Jak zepsuć elastyczność kodu
      • Klasy definiowane przez użytkownika
      • I wszystko inne
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 5. Typy liczbowe
    • Podstawy typów liczbowych Pythona
      • Literały liczbowe
      • Wbudowane narzędzia liczbowe
      • Operatory wyrażeń Pythona
        • Połączone operatory stosują się do priorytetów
        • Podwyrażenia grupowane są w nawiasach
        • Pomieszane typy poddawane są konwersji
        • Wprowadzenie: przeciążanie operatorów i polimorfizm
    • Liczby w akcji
      • Zmienne i podstawowe wyrażenia
      • Formaty wyświetlania liczb
      • Porównania zwykłe i łączone
      • Dzielenie klasyczne, bez reszty i prawdziwe
        • Obsługa różnych wersji Pythona
        • Dzielenie bez reszty a odcinanie
        • Dlaczego odcinanie ma znaczenie?
      • Precyzja liczb całkowitych
      • Liczby zespolone
      • Notacja szesnastkowa, ósemkowa i dwójkowa literały i konwersje
      • Operacje na poziomie bitów
      • Inne wbudowane narzędzia numeryczne
    • Inne typy liczbowe
      • Typ Decimal (liczby dziesiętne)
        • Typ Decimal zagadnienia podstawowe
        • Globalne ustawianie precyzji liczb dziesiętnych
        • Menedżer kontekstu dziesiętnego
      • Typ Fraction (liczby ułamkowe)
        • Typ Fraction zagadnienia podstawowe
        • Dokładność numeryczna ułamków zwykłych i dziesiętnych
        • Konwersje ułamków i typy mieszane
      • Zbiory
        • Podstawy zbiorów w Pythonie 2.6 i wersjach wcześniejszych
        • Literały zbiorów w Pythonie 3.x i 2.7
        • Ograniczenia na obiekty niemutowalne i zbiory zamrożone
        • Zbiory składane w Pythonie 3.x i 2.7
        • Dlaczego zbiory?
      • Wartości Boolean
    • Rozszerzenia numeryczne
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 6. Wprowadzenie do typów dynamicznych
    • Sprawa brakujących deklaracji typu
      • Zmienne, obiekty i referencje
      • Typy powiązane są z obiektami, a nie ze zmiennymi
      • Obiekty są uwalniane
    • Referencje współdzielone
      • Referencje współdzielone a modyfikacje w miejscu
      • Referencje współdzielone a równość
    • Typy dynamiczne są wszędzie
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 7. Łańcuchy znaków
    • Co znajdziesz w tym rozdziale
      • Unicode krótka historia
    • Łańcuchy znaków podstawy
    • Literały łańcuchów znaków
      • Łańcuchy znaków w apostrofach i cudzysłowach są tym samym
      • Sekwencje ucieczki reprezentują znaki specjalne
      • Surowe łańcuchy znaków blokują sekwencje ucieczki
      • Potrójne cudzysłowy i apostrofy kodują łańcuchy znaków będące wielowierszowymi blokami
    • Łańcuchy znaków w akcji
      • Podstawowe operacje
      • Indeksowanie i wycinki
        • Rozszerzone wycinki trzeci limit i obiekty wycinków
      • Narzędzia do konwersji łańcuchów znaków
        • Konwersje kodu znaków
      • Modyfikowanie łańcuchów znaków
    • Metody łańcuchów znaków
      • Składnia wywoływania metod
      • Metody typów znakowych
      • Przykłady metod łańcuchów znaków modyfikowanie
      • Przykłady metod łańcuchów znaków analiza składniowa tekstu
      • Inne często używane metody łańcuchów znaków
      • Oryginalny moduł string (usunięty w wersji 3.0)
    • Wyrażenia formatujące łańcuchy znaków
      • Formatowanie łańcuchów tekstu z użyciem wyrażeń formatujących podstawy
      • Składnia zaawansowanych wyrażeń formatujących
      • Przykłady zaawansowanych wyrażeń formatujących
      • Wyrażenia formatujące oparte na słowniku
    • Formatowanie łańcuchów z użyciem metody format
      • Podstawy
      • Używanie kluczy, atrybutów i przesunięć
      • Zaawansowana składnia wywołań metody format
      • Przykłady zaawansowanego formatowania łańcuchów znaków z użyciem metody format
      • Porównanie metody format z wyrażeniami formatującymi
      • Dlaczego miałbyś korzystać z metody format
        • Dodatkowe możliwości: wbudowane funkcje czy ogólne techniki programowania
        • Elastyczna składnia odwołań: dodatkowa złożoność i nakładanie się funkcjonalności
        • Jawne odwołania do wartości: teraz opcjonalne i prawdopodobnie nie będą używane
        • Nazwy metod i argumenty neutralne kontekstowo estetyka kodu kontra zastosowania praktyczne
        • Funkcje a wyrażenia: niewielka wygoda
    • Generalne kategorie typów
      • Typy z jednej kategorii współdzielą zbiory operacji
      • Typy mutowalne można modyfikować w miejscu
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 8. Listy oraz słowniki
    • Listy
    • Listy w akcji
      • Podstawowe operacje na listach
      • Iteracje po listach i składanie list
      • Indeksowanie, wycinki i macierze
      • Modyfikacja list w miejscu
        • Przypisywanie do indeksu i wycinków
        • Wywołania metod list
        • Kilka słów o sortowaniu list
        • Inne, często stosowane metody list
        • Inne popularne operacje na listach
    • Słowniki
    • Słowniki w akcji
      • Podstawowe operacje na słownikach
      • Modyfikacja słowników w miejscu
      • Inne metody słowników
      • Przykład baza danych o filmach
        • Przykład mapowanie wartości na klucze
      • Uwagi na temat korzystania ze słowników
        • Wykorzystywanie słowników do symulowania elastycznych list liczby całkowite jako klucze
        • Wykorzystywanie słowników z rzadkimi strukturami danych krotki jako klucze
        • Unikanie błędów z brakującymi kluczami
        • Zagnieżdżanie słowników
      • Inne sposoby tworzenia słowników
      • Zmiany dotyczące słowników w Pythonie 3.x i 2.7
        • Słowniki składane w wersjach 3.x i 2.7
        • Widoki słowników w wersji 3.x (oraz wersji 2.7 przy użyciu nowych metod)
        • Widoki słowników i zbiory
        • Sortowanie kluczy słowników w wersji 3.x
        • Porównywanie rozmiarów słowników nie działa w 3.x
        • W wersji 3.x metoda has_key nie istnieje, niech żyje in!
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 9. Krotki, pliki i wszystko inne
    • Krotki
      • Krotki w akcji
        • Właściwości składni krotek przecinki i nawiasy
        • Konwersje, metody oraz niemutowalność
      • Dlaczego istnieją listy i krotki
      • Repetytorium: rekordy krotki nazwane
    • Pliki
      • Otwieranie plików
      • Wykorzystywanie plików
      • Pliki w akcji
      • Pliki tekstowe i binarne krótka historia
      • Przechowywanie obiektów Pythona w plikach i przetwarzanie ich
      • Przechowywanie natywnych obiektów Pythona moduł pickle
      • Przechowywanie obiektów Pythona w formacie JSON
      • Przechowywanie spakowanych danych binarnych moduł struct
      • Menedżery kontekstu plików
      • Inne narzędzia powiązane z plikami
    • Przegląd i podsumowanie podstawowych typów obiektów
      • Elastyczność obiektów
      • Referencje a kopie
      • Porównania, testy równości i prawda
        • Porównywania i sortowania typów mieszanych w Pythonie 2.x i 3.x
        • Porównywanie słowników w Pythonie 2.x i 3.x
      • Prawda czy fałsz, czyli znaczenie True i False w Pythonie
        • Obiekt None
        • Typ bool
      • Hierarchie typów Pythona
      • Obiekty typów
      • Inne typy w Pythonie
    • Pułapki typów wbudowanych
      • Przypisanie tworzy referencje, nie kopie
      • Powtórzenie dodaje jeden poziom zagłębienia
      • Uwaga na cykliczne struktury danych
      • Typów niemutowalnych nie można modyfikować w miejscu
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
    • Sprawdź swoją wiedzę ćwiczenia do części drugiej
  • Część III Instrukcje i składnia
  • Rozdział 10. Wprowadzenie do instrukcji Pythona
    • Raz jeszcze o hierarchii pojęciowej języka Python
    • Instrukcje Pythona
    • Historia dwóch if
      • Co dodaje Python
      • Co usuwa Python
        • Nawiasy są opcjonalne
        • Koniec wiersza jest końcem instrukcji
        • Koniec wcięcia to koniec bloku
      • Skąd bierze się składnia z użyciem wcięć
      • Kilka przypadków specjalnych
        • Przypadki specjalne dla reguły o końcu wiersza
        • Przypadki specjalne dla reguły o wcięciach bloków
    • Szybki przykład interaktywne pętle
      • Prosta pętla interaktywna
      • Wykonywanie obliczeń na danych wpisywanych przez użytkownika
      • Obsługa błędów poprzez sprawdzanie danych wejściowych
      • Obsługa błędów za pomocą instrukcji try
        • Obsługa liczb zmiennoprzecinkowych
      • Kod zagnieżdżony na trzy poziomy głębokości
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 11. Przypisania, wyrażenia i wyświetlanie
    • Instrukcje przypisania
      • Formy instrukcji przypisania
      • Przypisanie sekwencji
        • Zaawansowane wzorce przypisywania sekwencji
      • Rozszerzona składnia rozpakowania sekwencji w Pythonie 3.x
        • Rozszerzona składania rozpakowania w działaniu
        • Przypadki brzegowe
        • Wygodny gadżet
        • Zastosowanie w pętli for
      • Przypisanie z wieloma celami
        • Przypisanie z wieloma celami a współdzielone referencje
      • Przypisania rozszerzone
        • Przypisania rozszerzone a współdzielone referencje
      • Reguły dotyczące nazw zmiennych
        • Konwencje dotyczące nazewnictwa
        • Nazwy nie mają typu, ale obiekty tak
    • Instrukcje wyrażeń
      • Instrukcje wyrażeń i modyfikacje w miejscu
    • Polecenia print
      • Funkcja print z Pythona 3.x
        • Format wywołania
        • Funkcja print z wersji 3.x w działaniu
      • Instrukcja print w Pythonie 2.x
        • Formy instrukcji
        • Instrukcja print Pythona 2.x w działaniu
      • Przekierowanie strumienia wyjściowego
        • Program Witaj, świecie!
        • Ręczne przekierowanie strumienia wyjścia
        • Automatyczne przekierowanie strumienia
      • Wyświetlanie niezależne od wersji
        • Konwerter 2to3
        • Importowanie z __future__
        • Neutralizacja różnic w wyświetlaniu za pomocą kodu
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 12. Testy if i reguły składni
    • Instrukcje if
      • Ogólny format
      • Proste przykłady
      • Rozgałęzienia kodu
        • Obsługa domyślnych wartości wyboru
        • Obsługa bardziej złożonych operacji
    • Reguły składni Pythona raz jeszcze
      • Ograniczniki bloków reguły tworzenia wcięć
        • Unikaj mieszania tabulatorów i spacji nowa opcja sprawdzania błędów w Pythonie 3.x
      • Ograniczniki instrukcji wiersze i znaki kontynuacji
      • Kilka przypadków specjalnych
    • Testy prawdziwości i testy logiczne
    • Wyrażenie trójargumentowe if/else
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 13. Pętle while i for
    • Pętle while
      • Ogólny format
      • Przykłady
    • Instrukcje break, continue, pass oraz else w pętli
      • Ogólny format pętli
      • Instrukcja pass
      • Instrukcja continue
      • Instrukcja break
      • Klauzula else pętli
        • Więcej o części pętli else
    • Pętle for
      • Ogólny format
      • Przykłady
        • Podstawowe zastosowanie
        • Inne typy danych
        • Przypisanie krotek w pętli for
        • Rozszerzone przypisanie sekwencji w pętlach for w Pythonie 3.x
        • Zagnieżdżone pętle for
    • Techniki tworzenia pętli
      • Pętle z licznikami range
      • Skanowanie sekwencji pętla while z funkcją range kontra pętla for
      • Przetasowania sekwencji funkcje range i len
      • Przechodzenie niewyczerpujące range kontra wycinki
      • Modyfikowanie list range kontra listy składane
      • Przechodzenie równoległe zip oraz map
        • Równoznaczność funkcji map w Pythonie 2.x
        • Tworzenie słowników za pomocą funkcji zip
      • Generowanie wartości przesunięcia i elementów enumerate
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 14. Iteracje i listy składane
    • Iteracje pierwsze spojrzenie
      • Protokół iteracyjny iteratory plików
      • Iterowanie ręczne iter i next
        • Pełny protokół iteracji
        • Iteracje ręczne
      • Inne wbudowane typy iterowalne
    • Listy składane wprowadzenie
      • Podstawy list składanych
      • Wykorzystywanie list składanych w plikach
      • Rozszerzona składnia list składanych
        • Klauzula filtrująca: if
        • Zagnieżdżone pętle: klauzula for
    • Inne konteksty iteracyjne
    • Nowe obiekty iterowalne w Pythonie 3.x
      • Wpływ na kod w wersji 2.x zalety i wady
      • Obiekt iterowalny range
      • Obiekty iterowalne map, zip i filter
      • Iteratory wielokrotne kontra pojedyncze
      • Obiekty iterowalne widoki słownika
    • Inne zagadnienia związane z iteracjami
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 15. Wprowadzenie do dokumentacji
    • Źródła dokumentacji Pythona
      • Komentarze ze znakami #
      • Funkcja dir
      • Notki dokumentacyjne __doc__
        • Notki dokumentacyjne zdefiniowane przez użytkownika
        • Standardy i priorytety notek dokumentacyjnych
        • Wbudowane notki dokumentacyjne
      • PyDoc funkcja help
      • PyDoc raporty HTML
        • Python 3.2 i nowsze wersje: tryb PyDoc dla wszystkich przeglądarek
        • Python 3.2 i wersje wcześniejsze: klient GUI
      • Nie tylko notki docstrings pakiet Sphinx
      • Zbiór standardowej dokumentacji
      • Zasoby internetowe
      • Publikowane książki
    • Często spotykane problemy programistyczne
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
    • Sprawdź swoją wiedzę ćwiczenia do części trzeciej
  • Część IV Funkcje i generatory
  • Rozdział 16. Podstawy funkcji
    • Dlaczego używamy funkcji
    • Tworzenie funkcji
      • Instrukcje def
      • Instrukcja def uruchamiana jest w czasie wykonania
    • Pierwszy przykład definicje i wywoływanie
      • Definicja
      • Wywołanie
      • Polimorfizm w Pythonie
    • Drugi przykład przecinające się sekwencje
      • Definicja
      • Wywołania
      • Raz jeszcze o polimorfizmie
      • Zmienne lokalne
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 17. Zasięgi
    • Podstawy zasięgów w Pythonie
      • Reguły dotyczące zasięgów
      • Rozwiązywanie nazw reguła LEGB
        • Inne zasięgi Pythona przegląd
      • Przykład zasięgu
      • Zasięg wbudowany
        • Przedefiniowanie wbudowanych nazw: lepiej czy gorzej?
    • Instrukcja global
      • Projektowanie programów: minimalizowanie stosowania zmiennych globalnych
      • Projektowanie programów: minimalizowanie modyfikacji dokonywanych pomiędzy plikami
      • Inne metody dostępu do zmiennych globalnych
    • Zasięgi a funkcje zagnieżdżone
      • Szczegóły dotyczące zasięgów zagnieżdżonych
      • Przykłady zasięgów zagnieżdżonych
      • Funkcje fabrykujące: domknięcia
        • Proste funkcje fabrykujące
        • Funkcje fabrykujące kontra klasy, runda pierwsza
      • Zachowywanie stanu zasięgu zawierającego za pomocą argumentów domyślnych
        • Zasięgi zagnieżdżone, wartości domyślne i wyrażenia lambda
        • Zmienne pętli mogą wymagać wartości domyślnych, a nie zasięgów
        • Dowolne zagnieżdżanie zasięgów
    • Instrukcja nonlocal w Pythonie 3.x
      • Podstawy instrukcji nonlocal
      • Instrukcja nonlocal w akcji
        • Użycie zmiennych nielokalnych w celu modyfikacji
        • Przypadki graniczne
    • Czemu służą zmienne nonlocal? Opcje zachowania stanu
      • Zachowanie stanu: zmienne nonlocal (tylko w wersji 3.x)
      • Zachowanie stanu: zmienne globalne tylko jedna kopia
      • Zachowanie stanu: klasy jawne atrybuty (wprowadzenie)
      • Zachowanie stanu: atrybuty funkcji (w wersjach 3.x i 2.x)
        • Zachowanie stanu: obiekty mutowalne duchy przeszłości języka Pyton?
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 18. Argumenty
    • Podstawy przekazywania argumentów
      • Argumenty a współdzielone referencje
      • Unikanie modyfikacji argumentów mutowalnych
      • Symulowanie parametrów wyjścia i wielu wyników działania
    • Specjalne tryby dopasowywania argumentów
      • Podstawy dopasowywania argumentów
      • Składnia dopasowania argumentów
      • Dopasowywanie argumentów szczegóły
      • Przykłady ze słowami kluczowymi i wartościami domyślnymi
        • Słowa kluczowe
        • Wartości domyślne
        • Łączenie słów kluczowych i wartości domyślnych
      • Przykłady dowolnych argumentów
        • Nagłówki: zbieranie argumentów
        • Wywołania: rozpakowywanie argumentów
        • Ogólne zastosowanie funkcji
        • Zlikwidowana wbudowana funkcja apply (Python 2.x)
      • Argumenty tylko ze słowami kluczowymi (z Pythona 3.x)
        • Reguły dotyczące kolejności
        • Czemu służą argumenty ze słowami kluczowymi?
    • Przykład z funkcją obliczającą minimum
      • Pełne rozwiązanie
      • Dodatkowy bonus
      • Puenta
    • Uogólnione funkcje działające na zbiorach
    • Emulacja funkcji print z Pythona 3.0
      • Wykorzystywanie argumentów ze słowami kluczowymi
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 19. Zaawansowane zagadnienia dotyczące funkcji
    • Koncepcje projektowania funkcji
    • Funkcje rekurencyjne
      • Sumowanie z użyciem rekurencji
      • Implementacje alternatywne
      • Pętle a rekurencja
      • Obsługa dowolnych struktur
        • Rekurencja kontra kolejki i stosy
        • Cykle, ścieżki i ograniczenia stosu
        • Więcej przykładów rekurencji
    • Obiekty funkcji atrybuty i adnotacje
      • Pośrednie wywołania funkcji obiekty pierwszej klasy
      • Introspekcja funkcji
      • Atrybuty funkcji
      • Adnotacje funkcji w Pythonie 3.x
    • Funkcje anonimowe lambda
      • Podstawy wyrażeń lambda
      • Po co używamy wyrażeń lambda
        • Wielotorowe rozgałęzienia kodu finał
      • Jak (nie) zaciemniać kodu napisanego w Pythonie
      • Zasięgi: wyrażenia lambda również można zagnieżdżać
    • Narzędzia programowania funkcyjnego
      • Odwzorowywanie funkcji na obiekty iterowalne map
      • Wybieranie elementów obiektów iterowalnych funkcja filter
      • Łączenie elementów obiektów iterowalnych funkcja reduce
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 20. Listy składane i generatory
    • Listy składane i narzędzia funkcyjne
      • Listy składane kontra funkcja map
      • Dodajemy warunki i pętle zagnieżdżone filter
        • Formalna składnia list składanych
      • Przykład listy składane i macierze
      • Nie nadużywaj list składanych: reguła KISS
        • Druga strona medalu: wydajność, zwięzłość, ekspresyjność
    • Funkcje i wyrażenia generatorów
      • Funkcje generatorów yield kontra return
        • Zawieszanie stanu
        • Integracja protokołu iteracji
        • Funkcje generatorów w działaniu
        • Dlaczego funkcje generatorów?
        • Rozszerzony protokół funkcji generatorów send kontra next
      • Wyrażenia generatorów obiekty iterowalne spotykają złożenia
        • Dlaczego wyrażenia generatora?
        • Wyrażenia generatora a funkcja map
        • Wyrażenia generatora a filtry
      • Funkcje generatorów a wyrażenia generatorów
      • Generatory są obiektami o jednoprzebiegowej iteracji
      • Generowanie wyników we wbudowanych typach, narzędziach i klasach
        • Generatory i narzędzia biblioteczne: skanery katalogów
        • Generatory i funkcje aplikacji
        • Przegląd: obiekty iterowalne definiowane przez użytkownika w klasach
      • Przykład generowanie mieszanych sekwencji
        • Sekwencje mieszające
        • Proste funkcje
        • Funkcje generatora
        • Wyrażenia generatora
        • Funkcja tester
        • Permutacje: wszystkie możliwe kombinacje
      • Nie nadużywaj generatorów: reguła EIBTI
        • Inne spojrzenie: miejsce i czas, zwięzłość, ekspresyjność
      • Przykład emulowanie funkcji zip i map za pomocą narzędzi iteracyjnych
        • Tworzymy własną implementację funkcji map
        • Własna wersja funkcji zip(...) i map(None, ...)
    • Podsumowanie obiektów składanych
      • Zakresy i zmienne składane
      • Zrozumieć zbiory i słowniki składane
      • Rozszerzona składnia zbiorów i słowników składanych
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 21. Wprowadzenie do pomiarów wydajności
    • Pomiary wydajności iteracji
      • Moduł pomiaru czasu domowej roboty
      • Skrypt mierzący wydajność
      • Wyniki pomiarów czasu
        • Wpływ wywołań funkcji: map
      • Inne rozwiązania dla modułu do pomiaru czasu
        • Użycie argumentów ze słowami kluczowymi w wersji 3.x
      • Inne sugestie
    • Mierzenie czasu iteracji z wykorzystaniem modułu timeit
      • Podstawowe reguły korzystania z modułu timeit
        • Interaktywne użycie i wywołania API
        • Korzystanie z poziomu wiersza polecenia
        • Mierzenie czasu działania instrukcji wielowierszowych
        • Inne tryby użytkowania: instalacje, podsumowania i obiekty
      • Moduł i skrypt testujący z użyciem modułu timeit
      • Wyniki działania skryptu testującego
      • Jeszcze trochę zabawy z mierzeniem wydajności
        • Wygrana funkcji map i rzadka porażka PyPy
        • Jeszcze kilka słów o wpływie wywołań funkcji
        • Techniki porównywania własne funkcje kontra moduł timeit
        • Możliwości ulepszenia kod instalacyjny
    • Inne zagadnienia związane z mierzeniem szybkości działania kodu test pystone
    • Pułapki związane z funkcjami
      • Lokalne nazwy są wykrywane w sposób statyczny
      • Wartości domyślne i obiekty mutowalne
      • Funkcje, które nie zwracają wyników
      • Różne problemy związane z funkcjami
        • Otaczanie zasięgów i zmiennych pętli: funkcje fabrykujące
        • Ukrywanie wbudowanych funkcji przez przypisania: cieniowanie
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
    • Sprawdź swoją wiedzę ćwiczenia do części czwartej
  • Część V Moduły i pakiety
  • Rozdział 22. Moduły wprowadzenie
    • Dlaczego używamy modułów
    • Architektura programu w Pythonie
      • Struktura programu
      • Importowanie i atrybuty
      • Moduły biblioteki standardowej
    • Jak działa importowanie
      • 1. Odszukanie modułu
      • 2. Kompilowanie (o ile jest to potrzebne)
      • 3. Wykonanie
    • Pliki kodu bajtowego __pycache__ w Pythonie 3.2+
      • Modele plików kodu bajtowego w akcji
    • Ścieżka wyszukiwania modułów
      • Konfigurowanie ścieżki wyszukiwania
      • Wariacje ścieżki wyszukiwania modułów
      • Lista sys.path
      • Wybór pliku modułu
        • Kody źródłowe modułów
        • Priorytety wyboru
        • Importowanie punktów zaczepienia i plików ZIP
        • Pliki zoptymalizowanego kodu bajtowego
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 23. Podstawy tworzenia modułów
    • Tworzenie modułów
      • Nazwy modułów
      • Inne rodzaje modułów
    • Używanie modułów
      • Instrukcja import
      • Instrukcja from
      • Instrukcja from *
      • Operacja importowania jest przeprowadzana tylko raz
        • Kod inicjalizujący
      • Instrukcje import oraz from są przypisaniami
        • Modyfikowanie elementów mutowalnych w modułach
        • Modyfikowanie nazw pomiędzy plikami
      • Równoważność instrukcji import oraz from
      • Potencjalne pułapki związane z użyciem instrukcji from
        • Kiedy wymagane jest stosowanie instrukcji import
    • Przestrzenie nazw modułów
      • Pliki generują przestrzenie nazw
      • Słowniki przestrzeni nazw: __dict__
      • Kwalifikowanie nazw atrybutów
      • Importowanie a zasięgi
      • Zagnieżdżanie przestrzeni nazw
    • Przeładowywanie modułów
      • Podstawy przeładowywania modułów
      • Przykład przeładowywania z użyciem reload
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 24. Pakiety modułów
    • Podstawy importowania pakietów
      • Pakiety a ustawienia ścieżki wyszukiwania
      • Pliki pakietów __init__.py
        • Role pliku inicjalizacji pakietu
    • Przykład importowania pakietu
      • Instrukcja from a instrukcja import w importowaniu pakietów
    • Do czego służy importowanie pakietów
      • Historia trzech systemów
    • Względne importowanie pakietów
      • Zmiany w Pythonie 3.0
      • Podstawy importowania względnego
      • Do czego służą importy względne
        • Importowanie względne w wersji 3.x
        • Względne importy a bezwzględne ścieżki pakietów
      • Zasięg importów względnych
      • Podsumowanie reguł wyszukiwania modułów
      • Importy względne w działaniu
        • Importowanie spoza pakietów
        • Importy wewnątrz pakietów
        • Importy są nadal względne w stosunku do bieżącego katalogu roboczego
        • Użycie importów względnych i bezwzględnych
        • Importy względne przeszukują tylko pakiety
        • Importy są nadal względne w stosunku do katalogu roboczego (cd.)
      • Pułapki związane z importem względnym w pakietach: zastosowania mieszane
        • Problem
        • Rozwiązanie nr 1: podkatalogi pakietów
        • Rozwiązanie 2: import bezwzględny z użyciem pełnej ścieżki
        • Przykład: aplikacja z kodem autotestu modułu (wprowadzenie)
    • Pakiety przestrzeni nazw w Pythonie 3.3
      • Semantyka pakietów przestrzeni nazw
        • Algorytm importu
      • Wpływ na zwykłe pakiety: opcjonalne pliki __init__.py
      • Pakiety przestrzeni nazw w akcji
      • Zagnieżdżanie pakietów przestrzeni nazw
      • Pliki nadal mają pierwszeństwo przed katalogami
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 25. Zaawansowane zagadnienia związane z modułami
    • Koncepcje związane z projektowaniem modułów
    • Ukrywanie danych w modułach
      • Minimalizacja niebezpieczeństw użycia from * _X oraz __all__
    • Włączanie opcji z przyszłych wersji Pythona: __future__
    • Mieszane tryby użycia __name__ oraz __main__
      • Testy jednostkowe z wykorzystaniem atrybutu __name__
    • Przykład kod działający w dwóch trybach
      • Symbole walut: Unicode w akcji
      • Notki dokumentacyjne: dokumentacja modułu w działaniu
    • Modyfikacja ścieżki wyszukiwania modułów
    • Rozszerzenie as dla instrukcji import oraz from
    • Przykład moduły są obiektami
    • Importowanie modułów z użyciem nazwy w postaci ciągu znaków
      • Uruchamianie ciągów znaków zawierających kod
      • Bezpośrednie wywołania: dwie opcje
    • Przykład przechodnie przeładowywanie modułów
      • Przeładowywanie rekurencyjne
        • Testowanie przeładowań rekurencyjnych
      • Rozwiązania alternatywne
        • Testowanie wariantów przeładowania
    • Pułapki związane z modułami
      • Kolizje nazw modułów: pakiety i importowanie względne w pakietach
      • W kodzie najwyższego poziomu kolejność instrukcji ma znaczenie
      • Instrukcja from kopiuje nazwy, jednak łącza już nie
      • Instrukcja from * może zaciemnić znaczenie zmiennych
      • Funkcja reload może nie mieć wpływu na obiekty importowane za pomocą from
      • Funkcja reload i instrukcja from a testowanie interaktywne
      • Rekurencyjne importowanie za pomocą from może nie działać
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
    • Sprawdź swoją wiedzę ćwiczenia do części piątej
  • Część VI Klasy i programowanie zorientowane obiektowo
  • Rozdział 26. Programowanie zorientowane obiektowo wprowadzenie
    • Po co używa się klas
    • Programowanie zorientowane obiektowo z dystansu
      • Wyszukiwanie atrybutów dziedziczonych
      • Klasy a instancje
      • Wywołania metod klasy
      • Tworzenie drzew klas
      • Przeciążanie operatorów
      • Programowanie zorientowane obiektowo oparte jest na ponownym wykorzystaniu kodu
        • Polimorfizm i klasy
        • Programowanie przez dostosowanie
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 27. Podstawy tworzenia klas
    • Klasy generują wiele obiektów instancji
      • Obiekty klas udostępniają zachowania domyślne
      • Obiekty instancji są rzeczywistymi elementami
      • Pierwszy przykład
    • Klasy dostosowujemy do własnych potrzeb przez dziedziczenie
      • Drugi przykład
      • Klasy są atrybutami w modułach
    • Klasy mogą przechwytywać operatory Pythona
      • Trzeci przykład
        • Zwracamy wyniki lub nie
      • Po co przeciążamy operatory
    • Najprostsza klasa Pythona na świecie
      • Jeszcze kilka słów o rekordach: klasy kontra słowniki
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 28. Bardziej realistyczny przykład
    • Krok 1. tworzenie instancji
      • Tworzenie konstruktorów
      • Testowanie w miarę pracy
      • Wykorzystywanie kodu na dwa sposoby
    • Krok 2. dodawanie metod
      • Tworzenie kodu metod
    • Krok 3. przeciążanie operatorów
      • Udostępnienie sposobów wyświetlania
    • Krok 4. dostosowywanie zachowania za pomocą klas podrzędnych
      • Tworzenie klas podrzędnych
      • Rozszerzanie metod niepoprawny sposób
      • Rozszerzanie metod poprawny sposób
      • Polimorfizm w akcji
      • Dziedziczenie, dostosowanie do własnych potrzeb i rozszerzenie
      • Programowanie zorientowane obiektowo idea
    • Krok 5. dostosowanie do własnych potrzeb także konstruktorów
      • Programowanie zorientowane obiektowo jest prostsze, niż się wydaje
      • Inne sposoby łączenia klas
    • Krok 6. wykorzystywanie narzędzi do introspekcji
      • Specjalne atrybuty klas
      • Uniwersalne narzędzie do wyświetlania
      • Atrybuty instancji a atrybuty klas
      • Nazwy w klasach narzędziowych
      • Ostateczna postać naszych klas
    • Krok 7. i ostatni przechowywanie obiektów w bazie danych
      • Obiekty pickle i shelve
        • Moduł pickle
        • Moduł shelve
      • Przechowywanie obiektów w bazie danych za pomocą shelve
      • Interaktywna eksploracja obiektów shelve
      • Uaktualnianie obiektów w pliku shelve
    • Przyszłe kierunki rozwoju
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 29. Szczegóły kodowania klas
    • Instrukcja class
      • Ogólna forma
      • Przykład
    • Metody
      • Przykład metody
      • Wywoływanie konstruktorów klas nadrzędnych
      • Inne możliwości wywoływania metod
    • Dziedziczenie
      • Tworzenie drzewa atrybutów
      • Specjalizacja odziedziczonych metod
      • Techniki interfejsów klas
      • Abstrakcyjne klasy nadrzędne
        • Abstrakcyjne klasy nadrzędne z Pythona 3.x oraz 2.6+: wprowadzenie
    • Przestrzenie nazw cała historia
      • Proste nazwy globalne, o ile nie są przypisane
      • Nazwy atrybutów przestrzenie nazw obiektów
      • Zen przestrzeni nazw Pythona przypisania klasyfikują zmienne
      • Klasy zagnieżdżone jeszcze kilka słów o regule LEGB
      • Słowniki przestrzeni nazw przegląd
      • Łącza przestrzeni nazw przechodzenie w górę drzewa klas
    • Raz jeszcze o notkach dokumentacyjnych
    • Klasy a moduły
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 30. Przeciążanie operatorów
    • Podstawy
      • Konstruktory i wyrażenia __init__ i __sub__
      • Często spotykane metody przeciążania operatorów
    • Indeksowanie i wycinanie __getitem__ i __setitem__
      • Wycinki
      • Wycinanie i indeksowanie w Pythonie 2.x
      • Metoda __index__ w wersji 3.x nie służy do indeksowania!
    • Iteracja po indeksie __getitem__
    • Obiekty iteratorów __iter__ i __next__
      • Iteratory zdefiniowane przez użytkownika
        • Skanowanie pojedyncze i wielokrotne
        • Klasy i generatory
      • Wiele iteracji po jednym obiekcie
        • Klasy i wycinki
      • Alternatywa: metoda__iter__ i instrukcja yield
        • Wielokrotne iteracje za pomocą instrukcji yield
    • Test przynależności __contains__, __iter__ i __getitem__
    • Dostęp do atrybutów __getattr__ oraz __setattr__
      • Odwołania do atrybutów
      • Przypisywanie wartości i usuwanie atrybutów
      • Inne narzędzia do zarządzania atrybutami
      • Emulowanie prywatności w atrybutach instancji
    • Reprezentacje łańcuchów __repr__ oraz __str__
      • Po co nam dwie metody wyświetlania?
      • Uwagi dotyczące wyświetlania
    • Dodawanie prawostronne i miejscowa modyfikacja: metody __radd__ i __iadd__
      • Dodawanie prawostronne
        • Stosowanie metody __add__ w __radd__
        • Eskalowanie typu klasy
      • Dodawanie w miejscu
    • Wywołania __call__
      • Interfejsy funkcji i kod oparty na wywołaniach zwrotnych
    • Porównania __lt__, __gt__ i inne
      • Metoda __cmp__ w 2.x
    • Testy logiczne __bool__ i __len__
      • Metody logiczne w Pythonie 2.x
    • Destrukcja obiektu __del__
      • Uwagi dotyczące stosowania destruktorów
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 31. Projektowanie z użyciem klas
    • Python a programowanie zorientowane obiektowo
      • Polimorfizm to interfejsy, a nie sygnatury wywołań
    • Programowanie zorientowane obiektowo i dziedziczenie związek jest
    • Programowanie zorientowane obiektowo i kompozycja związki typu ma
      • Raz jeszcze procesor strumienia danych
    • Programowanie zorientowane obiektowo a delegacja obiekty opakowujące
    • Pseudoprywatne atrybuty klas
      • Przegląd zniekształcania nazw zmiennych
      • Po co używa się atrybutów pseudoprywatnych
    • Metody są obiektami z wiązaniem i bez wiązania
      • W wersji 3.x metody niezwiązane są funkcjami
      • Metody związane i inne obiekty wywoływane
        • Inne obiekty wywoływane
    • Klasy są obiektami uniwersalne fabryki obiektów
      • Do czego służą fabryki
    • Dziedziczenie wielokrotne klasy mieszane
      • Tworzenie klas mieszanych
        • Odczyt listy atrybutów obiektu __dict__
        • Wydobywanie atrybutów odziedziczonych z użyciem dir()
        • Wypisywanie atrybutów dla każdego obiektu w drzewie klas
        • Uruchomienie kodu wyświetlającego drzewo
        • Inny przykład użycia: wyświetlenie nazw zawierających znaki podkreślenia
        • Inny przykład użycia: uruchomienie kodu z większymi modułami
        • Moduł kolektora
        • Miejsce na udoskonalenia: algorytm MRO, sloty, interfejsy graficzne
    • Inne zagadnienia związane z projektowaniem
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 32. Zaawansowane zagadnienia związane z klasami
    • Rozszerzanie typów wbudowanych
      • Rozszerzanie typów za pomocą osadzania
      • Rozszerzanie typów za pomocą klas podrzędnych
    • Klasy w nowym stylu
      • Jak nowy jest nowy styl
    • Nowości w klasach w nowym stylu
      • Pomijanie instancji we wbudowanych operacjach przy pobieraniu atrybutów
        • Dlaczego zmieniło się wyszukiwanie?
        • Implikacje wynikające z przechwytywania atrybutów
        • Wymogi kodowania obiektów pośredniczących
        • Więcej informacji
      • Zmiany w modelu typów
        • Konsekwencje z perspektywy kontroli typów
      • Wszystkie obiekty dziedziczą po klasie object
        • Implikacje wynikające z użycia metod domyślnych
      • Zmiany w dziedziczeniu diamentowym
        • Implikacje wynikające z dziedziczenia diamentowego
        • Jawne rozwiązywanie konfliktów
        • Zakres zmian kolejności wyszukiwania
      • Więcej o kolejności odwzorowywania nazw
        • Algorytm MRO
        • Śledzenie algorytmu MRO
      • Przykład wiązanie atrybutów ze źródłami dziedziczenia
    • Nowości w klasach w nowym stylu
      • Sloty: deklaracje atrybutów
        • Podstawy slotów
        • Sloty i słowniki przestrzeni nazw
        • Wiele slotów w klasach nadrzędnych
        • Generyczna obsługa slotów i innych wirtualnych atrybutów
        • Zasady używania slotów
        • Przykład stosowania slotów: klasa ListTree i funkcja mapattrs
        • Co z szybkością slotów?
      • Właściwości klas: dostęp do atrybutów
        • Podstawy właściwości
      • Narzędzia atrybutów: __getattribute__ i deskryptory
      • Inne zmiany i rozszerzenia klas
    • Metody statyczne oraz metody klasy
      • Do czego potrzebujemy metod specjalnych
      • Metody statyczne w 2.x i 3.x
      • Alternatywy dla metod statycznych
      • Używanie metod statycznych i metod klas
      • Zliczanie instancji z użyciem metod statycznych
      • Zliczanie instancji z metodami klas
        • Zliczanie instancji dla każdej z klas z użyciem metod klas
    • Dekoratory i metaklasy część 1.
      • Podstawowe informacje o dekoratorach funkcji
      • Pierwsze spojrzenie na funkcję dekoratora zdefiniowaną przez użytkownika
      • Pierwsze spojrzenie na dekoratory klas i metaklasy
      • Dalsza lektura
    • Wbudowana funkcja super: zmiana na lepsze czy na gorsze?
      • Wielka debata o funkcji super
      • Tradycyjny, uniwersalny i ogólny sposób wywoływania klasy nadrzędnej
      • Podstawy i kompromisy użycia funkcji super
        • Stara semantyka: magiczny obiekt pośredniczący w wersji 3.x
        • Pułapka: beztroskie stosowanie wielokrotnego dziedziczenia
        • Ograniczenie: przeciążanie operatorów
        • Różnice w użyciu w wersji 2.x: rozbudowane wywołania
      • Zalety funkcji super: zmiany drzewa i kierowania metod
      • Zmiana klasy w trakcie działania programu a funkcja super
      • Kooperatywne kierowanie metod w drzewie wielokrotnego dziedziczenia
        • Podstawy: kooperatywne wywołanie funkcji super w akcji
        • Ograniczenie: wymóg zakotwiczenia łańcucha wywołań
        • Zakresy: model wszystko lub nic
        • Elastyczność założenia dotyczącego kolejności wywołań
        • Dostosowywanie: zastąpienie metody
        • Sprzęganie: zastosowanie w mieszaniu klas
        • Dostosowywanie: wymóg takich samych argumentów
      • Podsumowanie funkcji super
    • Pułapki związane z klasami
      • Modyfikacja atrybutów klas może mieć efekty uboczne
      • Modyfikowanie mutowalnych atrybutów klas również może mieć efekty uboczne
      • Dziedziczenie wielokrotne kolejność ma znaczenie
      • Zakresy w metodach i klasach
      • Różne pułapki związane z klasami
        • Rozsądnie wybieraj miejsce przechowywania atrybutu w instancji lub w klasie
        • Zazwyczaj wywołuj konstruktory klasy nadrzędnej
        • Klasy wykorzystujące delegację w 3.x __getattr__ i funkcje wbudowane
      • Przesadne opakowywanie
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
    • Sprawdź swoją wiedzę ćwiczenia do części szóstej
  • Część VII Wyjątki oraz narzędzia
  • Rozdział 33. Podstawy wyjątków
    • Po co używa się wyjątków
      • Role wyjątków
    • Wyjątki w skrócie
      • Domyślny program obsługi wyjątków
      • Przechwytywanie wyjątków
      • Zgłaszanie wyjątków
      • Wyjątki zdefiniowane przez użytkownika
      • Działania końcowe
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 34. Szczegółowe informacje dotyczące wyjątków
    • Instrukcja try/except/else
      • Jak działa instrukcja try
      • Części instrukcji try
        • Przechwytywanie wybranych i wszystkich wyjątków
        • Przechwytywanie wszystkich wyjątków: pusta instrukcja except i klasa Exception
      • Część try/else
      • Przykład zachowanie domyślne
      • Przykład przechwytywanie wbudowanych wyjątków
    • Instrukcja try/finally
      • Przykład działania kończące kod z użyciem try/finally
    • Połączona instrukcja try/except/finally
      • Składnia połączonej instrukcji try
      • Łączenie finally oraz except za pomocą zagnieżdżania
      • Przykład połączonego try
    • Instrukcja raise
      • Zgłaszanie wyjątków
      • Zakresy widoczności zmiennych w instrukcjach try i except
      • Przekazywanie wyjątków za pomocą raise
      • Łańcuchy wyjątków w Pythonie 3.x raise from
    • Instrukcja assert
      • Przykład wyłapywanie ograniczeń (ale nie błędów!)
    • Menedżery kontekstu with/as
      • Podstawowe zastosowanie
      • Protokół zarządzania kontekstem
      • Kilka menedżerów kontekstu w wersjach 3.1, 2.7 i nowszych
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 35. Obiekty wyjątków
    • Wyjątki powrót do przyszłości
      • Wyjątki oparte na łańcuchach znaków znikają
      • Wyjątki oparte na klasach
      • Tworzenie klas wyjątków
    • Do czego służą hierarchie wyjątków
    • Wbudowane klasy wyjątków
      • Kategorie wbudowanych wyjątków
      • Domyślne wyświetlanie oraz stan
    • Własne sposoby wyświetlania
    • Własne dane oraz zachowania
      • Udostępnianie szczegółów wyjątku
      • Udostępnianie metod wyjątków
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 36. Projektowanie z wykorzystaniem wyjątków
    • Zagnieżdżanie programów obsługi wyjątków
      • Przykład zagnieżdżanie przebiegu sterowania
      • Przykład zagnieżdżanie składniowe
    • Zastosowanie wyjątków
      • Wychodzenie z głęboko zagnieżdżonych pętli: instrukcja go to
      • Wyjątki nie zawsze są błędami
      • Funkcje mogą sygnalizować warunki za pomocą raise
      • Zamykanie plików oraz połączeń z serwerem
      • Debugowanie z wykorzystaniem zewnętrznych instrukcji try
      • Testowanie kodu wewnątrz tego samego procesu
      • Więcej informacji na temat funkcji sys.exc_info
      • Wyświetlanie błędów i śladów stosu
    • Wskazówki i pułapki dotyczące projektowania wyjątków
      • Co powinniśmy opakować w try
      • Jak nie przechwytywać zbyt wiele unikanie pustych except i wyjątków
      • Jak nie przechwytywać zbyt mało korzystanie z kategorii opartych na klasach
    • Podsumowanie podstaw języka Python
      • Zbiór narzędzi Pythona
      • Narzędzia programistyczne przeznaczone do większych projektów
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
    • Sprawdź swoją wiedzę ćwiczenia do części siódmej
  • Część VIII Zagadnienia zaawansowane
  • Rozdział 37. Łańcuchy znaków Unicode oraz łańcuchy bajtowe
    • Zmiany w łańcuchach znaków w Pythonie 3.x
    • Podstawy łańcuchów znaków
      • Kodowanie znaków
      • Jak Python zapisuje ciągi znaków w pamięci
      • Typy łańcuchów znaków Pythona
        • Po co są stosowane różne typy ciągów?
      • Pliki binarne i tekstowe
    • Podstawy kodowania ciągów znaków
      • Literały tekstowe w Pythonie 3.x
        • Literały Unicode w Pythonie 2.x i 3.3
      • Literały tekstowe w Pythonie 2.x
      • Konwersje typów ciągów
    • Kod łańcuchów znaków Unicode
      • Kod tekstu z zakresu ASCII
      • Kod tekstu spoza zakresu ASCII
      • Kodowanie i dekodowanie tekstu spoza zakresu ASCII
      • Inne techniki kodowania łańcuchów Unicode
      • Literały bajtowe
      • Konwersja kodowania
      • Łańcuchy znaków Unicode w Pythonie 2.x
        • Mieszanie typów ciągów w wersji 2.x
      • Deklaracje typu kodowania znaków pliku źródłowego
    • Wykorzystywanie obiektów bytes z Pythona 3.x
      • Wywołania metod
      • Operacje na sekwencjach
      • Inne sposoby tworzenia obiektów bytes
      • Mieszanie typów łańcuchów znaków
    • Obiekt bytearray w wersji 3.x (oraz 2.6 lub nowszej)
      • Typ bytearray w akcji
      • Podsumowanie typów ciągów znaków w Pythonie 3.x
    • Wykorzystywanie plików tekstowych i binarnych
      • Podstawy plików tekstowych
      • Tryby tekstowy i binarny w Pythonie 2.x i 3.x
      • Brak dopasowania typu i zawartości w Pythonie 3.x
    • Wykorzystywanie plików Unicode
      • Odczyt i zapis Unicode w Pythonie 3.x
        • Kodowanie ręczne
        • Kodowanie danych wyjściowych pliku
        • Dekodowanie danych wejściowych pliku
        • Dekodowanie błędnych dopasowań
      • Obsługa BOM w Pythonie 3.x
        • Pomijanie znacznika BOM w Notatniku
        • Pomijanie znacznika BOM w Pythonie
      • Pliki Unicode w Pythonie 2.x
      • Unicode w nazwach plików i w strumieniach
        • Nazwy plików: znaki i bajty
        • Zawartość strumienia: zmienna PYTHONIOENCODING
    • Inne zmiany w narzędziach do przetwarzania łańcuchów znaków w Pythonie 3.x
      • Moduł dopasowywania wzorców re
      • Moduł danych binarnych struct
      • Moduł serializacji obiektów pickle
      • Narzędzia do analizy składniowej XML
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 38. Zarządzane atrybuty
    • Po co zarządza się atrybutami
      • Wstawianie kodu wykonywanego w momencie dostępu do atrybutów
    • Właściwości
      • Podstawy
      • Pierwszy przykład
      • Obliczanie atrybutów
      • Zapisywanie właściwości w kodzie za pomocą dekoratorów
        • Dekoratory setter i deleter
    • Deskryptory
      • Podstawy
        • Argumenty metod deskryptorów
        • Deskryptory tylko do odczytu
      • Pierwszy przykład
      • Obliczone atrybuty
      • Wykorzystywanie informacji o stanie w deskryptorach
      • Powiązania pomiędzy właściwościami a deskryptorami
        • Deskryptory, sloty i nie tylko
    • Metody __getattr__ oraz __getattribute__
      • Podstawy
        • Unikanie pętli w metodach przechwytujących atrybuty
      • Pierwszy przykład
        • Metoda __getattribute__
      • Obliczanie atrybutów
        • Metoda __getattribute__
      • Porównanie metod __getattr__ oraz __getattribute__
      • Porównanie technik zarządzania atrybutami
      • Przechwytywanie atrybutów wbudowanych operacji
        • Powrót do menedżerów opartych na delegacji
    • Przykład sprawdzanie poprawności atrybutów
      • Wykorzystywanie właściwości do sprawdzania poprawności
        • Testowanie kodu
      • Wykorzystywanie deskryptorów do sprawdzania poprawności
        • Opcja 1: sprawdzanie z wykorzystaniem współdzielonego stanu deskryptora instancji
        • Opcja 2: sprawdzanie z wykorzystaniem indywidualnego stanu instancji
      • Wykorzystywanie metody __getattr__ do sprawdzania poprawności
      • Wykorzystywanie metody __getattribute__ do sprawdzania poprawności
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 39. Dekoratory
    • Czym jest dekorator
      • Zarządzanie wywołaniami oraz instancjami
      • Zarządzanie funkcjami oraz klasami
      • Wykorzystywanie i definiowanie dekoratorów
      • Do czego służą dekoratory
    • Podstawy
      • Dekoratory funkcji
        • Zastosowanie
        • Implementacja
        • Obsługa dekoracji metod
      • Dekoratory klas
        • Zastosowanie
        • Implementacja
        • Obsługa większej liczby instancji
      • Zagnieżdżanie dekoratorów
      • Argumenty dekoratorów
      • Dekoratory zarządzają także funkcjami oraz klasami
    • Kod dekoratorów funkcji
      • Śledzenie wywołań
      • Możliwości w zakresie zachowania informacji o stanie
        • Atrybuty instancji klasy
        • Zakresy zawierające oraz zmienne globalne
        • Zakresy funkcji zawierających oraz zmienne nielokalne
        • Atrybuty funkcji
      • Uwagi na temat klas I dekorowanie metod klas
        • Wykorzystywanie zagnieżdżonych funkcji do dekoracji metod
        • Wykorzystywanie deskryptorów do dekorowania metod
      • Mierzenie czasu wywołania
        • Dekoratory a pomiar czasu wywołania
        • Niuanse pomiaru czasu
      • Dodawanie argumentów dekoratora
        • Pomiar czasu z użyciem argumentów dekoratora
    • Kod dekoratorów klas
      • Klasy singletona
        • Alternatywne rozwiązania
      • Śledzenie interfejsów obiektów
        • Śledzenie interfejsów za pomocą dekoratorów klas
        • Stosowanie dekoratorów klas z wbudowanymi typami
      • Uwagi na temat klas II zachowanie większej liczby instancji
      • Dekoratory a funkcje zarządzające
      • Do czego służą dekoratory (raz jeszcze)
    • Bezpośrednie zarządzanie funkcjami oraz klasami
    • Przykład atrybuty prywatne i publiczne
      • Implementacja atrybutów prywatnych
      • Szczegóły implementacji I
        • Dziedziczenie a delegacja
        • Argumenty dekoratora
        • Zachowywanie stanu i zakresy funkcji zawierającej
        • Wykorzystanie __dict__ oraz __slots__ (i innych nazw wirtualnych)
      • Uogólnienie kodu pod kątem deklaracji atrybutów jako publicznych
      • Szczegóły implementacji II
        • Użycie nazw pseudoprywatnych __X
        • Złamanie prywatności
        • Kompromisy związane z dekoratorem
      • Znane problemy
        • Ograniczenie: delegacja metod przeciążania operatorów kończy się niepowodzeniem w Pythonie 3.x
        • Sposoby redefiniowania metod przeciążających operatory w wersji 3.x
          • Definicja śródwierszowa
          • Nadrzędne klasy mieszane
          • Warianty kodowania: routery, deskryptory, automatyzacja
        • Czy metody operatorów należy weryfikować?
        • Alternatywy implementacyjne: wstawianie __getattribute__, inspekcja stosu wywołań
      • W Pythonie nie chodzi o kontrolę
    • Przykład sprawdzanie poprawności argumentów funkcji
      • Cel
      • Prosty dekorator sprawdzający przedziały dla argumentów pozycyjnych
      • Uogólnienie kodu pod kątem słów kluczowych i wartości domyślnych
      • Szczegóły implementacji
        • Dalsza introspekcja
        • Założenia dotyczące argumentów
        • Algorytm dopasowywania
      • Znane problemy
        • Niepoprawne wywołania
        • Dowolne argumenty
        • Zagnieżdżone dekoratory
      • Argumenty dekoratora a adnotacje funkcji
      • Inne zastosowania sprawdzanie typów (skoro nalegamy!)
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 40. Metaklasy
    • Tworzyć metaklasy czy tego nie robić?
      • Zwiększające się poziomy magii
      • Język pełen haczyków
      • Wady funkcji pomocniczych
      • Metaklasy a dekoratory klas runda 1.
    • Model metaklasy
      • Klasy są instancjami obiektu type
      • Metaklasy są klasami podrzędnymi klasy type
      • Protokół instrukcji class
    • Deklarowanie metaklas
      • Deklarowanie w wersji 3.x
      • Deklarowanie w wersji 2.x
      • Kierowanie metaklas w wersjach 3.x i 2.x
    • Tworzenie metaklas
      • Prosta metaklasa
      • Dostosowywanie tworzenia do własnych potrzeb oraz inicjalizacja
      • Pozostałe sposoby tworzenia metaklas
        • Użycie prostych funkcji fabrycznych
        • Przeciążenie wywołań tworzących klasę za pomocą zwykłych klas
        • Przeciążenie wywołań tworzących klasę za pomocą metaklas
    • Instancje a dziedziczenie
      • Metaklasa a klasa nadrzędna
      • Dziedziczenie: pełna historia
        • Algorytm dziedziczenia w Pythonie: wersja prosta
        • Specjalny przypadek deskryptorów
        • Algorytm dziedziczenia w Pythonie: wersja nieco pełniejsza
        • Dziedziczenie przypisań atrybutów
        • Specjalny przypadek wbudowanych operacji
    • Metody metaklas
      • Metody metaklasy a metody klasy
      • Przeciążanie operatorów w metodach metaklasy
    • Przykład dodawanie metod do klas
      • Ręczne rozszerzanie
      • Rozszerzanie oparte na metaklasie
      • Metaklasy a dekoratory klas runda 2.
        • Rozszerzenie oparte na dekoratorach
        • Zarządzanie instancjami zamiast klasami
        • Metaklasa równoważna dekoratorowi klasy?
    • Przykład zastosowanie dekoratorów do metod
      • Ręczne śledzenie za pomocą dekoracji
      • Śledzenie za pomocą metaklas oraz dekoratorów
      • Zastosowanie dowolnego dekoratora do metod
      • Metaklasy a dekoratory klas runda 3. (i ostatnia)
    • Podsumowanie rozdziału
    • Sprawdź swoją wiedzę quiz
    • Sprawdź swoją wiedzę odpowiedzi
  • Rozdział 41. Wszystko, co najlepsze
    • Paradoks Pythona
      • Opcjonalne cechy języka
      • Przeciwko niepokojącym usprawnieniom
      • Złożoność a siła
      • Prostota a elitarność
      • Końcowe wnioski
    • Dokąd dalej?
    • Na bis: wydrukuj swój certyfikat!
  • Dodatki
  • Dodatek A Instalacja i konfiguracja
    • Instalowanie interpretera Pythona
      • Czy Python jest już zainstalowany?
      • Skąd pobrać Pythona
      • Instalacja Pythona
    • Konfiguracja Pythona
      • Zmienne środowiskowe Pythona
      • Jak ustawić opcje konfiguracyjne?
        • Zmienne powłoki systemu Unix i Linux
        • Zmienne DOS (system Windows)
        • Graficzny interfejs użytkownika zmiennych środowiskowych Windows
        • Rejestr systemu Windows
        • Pliki ścieżek
      • Opcje wiersza poleceń Pythona
        • Uruchamianie skryptów z argumentami
        • Uruchamianie kodu podanego w argumentach i pobranego ze standardowego wejścia
        • Uruchamianie modułów umieszczonych w ścieżce wyszukiwania
        • Tryby zoptymalizowany i niebuforowany
        • Tryb interaktywny po wykonaniu skryptu
        • Argumenty wiersza poleceń w Pythonie w.x
      • Uruchamianie Pythona 3.3 za pomocą wiersza poleceń Windows
    • Uzyskanie pomocy
  • Dodatek B Uruchamianie Pythona 3.x w systemie Windows
    • Dziedzictwo systemu Unix
    • Dziedzictwo systemu Windows
    • Wprowadzenie nowego programu uruchomieniowego w systemie Windows
    • Podręcznik do programu uruchomieniowego
      • Krok 1: dyrektywa wersji w pliku
      • Krok 2: parametry w wierszu poleceń
      • Krok 3: stosowanie i zmienianie ustawień domyślnych
    • Pułapki nowego programu uruchomieniowego
      • Pułapka 1: nierozpoznany w Uniksie wiersz #! uniemożliwia uruchomienie skryptu
        • Wpływ zmian na przykłady użyte w książce i korekta
      • Pułapka 2: domyślna wersja 2.x w programie uruchomieniowym
        • Wpływ zmian na przykłady w książce i korekta
      • Pułapka 3: nowa opcja modyfikacji zmiennej PATH
    • Podsumowanie: ostateczny wynik dla systemu Windows
  • Dodatek C Zmiany w języku Python a niniejsza książka
    • Najważniejsze różnice między wersjami 2.x i 3.x
      • Zmiany w wersji 3.x
      • Rozszerzenia dostępne tylko w wersji 3.x
    • Ogólne uwagi do zmian w wersji 3.x
      • Zmiany w bibliotekach i narzędziach
        • Zmiany w standardowej bibliotece
        • Zmiany w narzędziach
      • Migracja do wersji 3.x
    • Zmiany opisane w piątym wydaniu: wersje 2.7, 3.2 i 3.3
      • Zmiany w wersji 2.7
      • Zmiany w wersji 3.3
      • Zmiany w wersji 3.2
    • Zmiany opisane w czwartym wydaniu: wersje 2.6, 3.0 i 3.1
      • Zmiany w wersji 3.1
      • Zmiany w wersjach 3.0 i 2.6
      • Niektóre elementy języka usunięte w Pythonie 3.0
    • Zmiany opisane w trzecim wydaniu: wersje 2.3, 2.4 i 2.5
    • Wcześniejsze i późniejsze zmiany w Pythonie
  • Dodatek D Rozwiązania ćwiczeń podsumowujących poszczególne części książki
    • Część I Wprowadzenie
    • Część II Typy i operacje
    • Część III Instrukcja i składnia
    • Część IV Funkcje i generatory
    • Część V Moduły i pakiety
    • Część VI Klasy i programowanie zorientowane obiektowo
    • Część VII Wyjątki oraz narzędzia
      • O autorze
      • Kolofon
  • Title: Python. Wprowadzenie. Wydanie V
  • Author: Mark Lutz
  • Original title: Learning Python, 5th Edition
  • Translation: Grzegorz Kowalczyk, Andrzej Watrak, Anna Trojan, Marek Pętlicki
  • ISBN: 978-83-283-9170-3, 9788328391703
  • Date of issue: 2022-03-29
  • Format: Ebook
  • Item ID: pyth5v
  • Publisher: Helion