Spis treści
- 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
- Dlaczego ludzie używają Pythona?
- 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?
- Alternatywne implementacje Pythona
- 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
- Eksperymentowanie
- 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
- Interaktywny wiersz poleceń
- 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
- Typ Decimal (liczby dziesiętne)
- Rozszerzenia numeryczne
- Podsumowanie rozdziału
- Sprawdź swoją wiedzę quiz
- Sprawdź swoją wiedzę odpowiedzi
- Podstawy typów liczbowych Pythona
- 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
- Sprawa brakujących deklaracji typu
- 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
- Co znajdziesz w tym rozdziale
- 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
- Krotki w akcji
- 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
- Krotki
- 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
- Funkcja print z Pythona 3.x
- Podsumowanie rozdziału
- Sprawdź swoją wiedzę quiz
- Sprawdź swoją wiedzę odpowiedzi
- Instrukcje przypisania
- 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
- Ograniczniki bloków reguły tworzenia wcięć
- Testy prawdziwości i testy logiczne
- Wyrażenie trójargumentowe if/else
- Podsumowanie rozdziału
- Sprawdź swoją wiedzę quiz
- Sprawdź swoją wiedzę odpowiedzi
- Instrukcje if
- 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
- Pętle while
- 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
- Iteracje pierwsze spojrzenie
- 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
- Źródła dokumentacji Pythona
- 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
- Podstawy zasięgów w Pythonie
- 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
- Podstawy przekazywania argumentów
- 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, …)
- Funkcje generatorów yield kontra return
- 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
- Listy składane i narzędzia funkcyjne
- 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
- Podstawowe reguły korzystania z modułu timeit
- 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
- Pomiary wydajności iteracji
- 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
- Tworzenie modułów
- 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
- Semantyka pakietów przestrzeni nazw
- Podsumowanie rozdziału
- Sprawdź swoją wiedzę quiz
- Sprawdź swoją wiedzę odpowiedzi
- Podstawy importowania pakietów
- 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
- Przeładowywanie rekurencyjne
- 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
- Trzeci przykład
- 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
- Klasy generują wiele obiektów instancji
- 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
- Obiekty pickle i shelve
- Przyszłe kierunki rozwoju
- Podsumowanie rozdziału
- Sprawdź swoją wiedzę quiz
- Sprawdź swoją wiedzę odpowiedzi
- Krok 1. tworzenie instancji
- 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
- Instrukcja class
- 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
- Iteratory zdefiniowane przez użytkownika
- 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
- Dodawanie prawostronne
- 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
- Podstawy
- 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
- Tworzenie klas mieszanych
- Inne zagadnienia związane z projektowaniem
- Podsumowanie rozdziału
- Sprawdź swoją wiedzę quiz
- Sprawdź swoją wiedzę odpowiedzi
- Python a programowanie zorientowane obiektowo
- 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
- Pomijanie instancji we wbudowanych operacjach przy pobieraniu atrybutów
- 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
- Sloty: deklaracje atrybutów
- 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
- Rozszerzanie typów wbudowanych
- 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
- Po co używa się wyjątków
- 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
- Instrukcja try/except/else
- 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
- Wyjątki powrót do przyszłości
- 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
- Zagnieżdżanie programów obsługi wyjątków
- 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
- Literały tekstowe w Pythonie 3.x
- 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
- Odczyt i zapis Unicode w Pythonie 3.x
- 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
- Podstawy
- 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
- Podstawy
- 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
- Wykorzystywanie właściwości do sprawdzania poprawności
- Podsumowanie rozdziału
- Sprawdź swoją wiedzę quiz
- Sprawdź swoją wiedzę odpowiedzi
- Po co zarządza się atrybutami
- 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
- Dekoratory funkcji
- 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)
- Klasy singletona
- 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
- Czym jest dekorator
- 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
- Tworzyć metaklasy czy tego nie robić?
- 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!
- Paradoks Pythona
- 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
- Instalowanie interpretera Pythona
- 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
- Pułapka 1: nierozpoznany w Uniksie wiersz #! uniemożliwia uruchomienie skryptu
- 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 w bibliotekach i narzędziach
- 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
- Najważniejsze różnice między wersjami 2.x i 3.x
- 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
Opinie
Na razie nie ma opinii o produkcie.