Python. Wprowadzenie. Wydanie V (ebook) - Opis i dane produktu
-
Zgłoś

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!
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ć?
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!
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
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?
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
O autorze: Mark Lutz — to znany na całym świecie instruktor Pythona, autor najwcześniejszych oraz najlepiej sprzedających się tekstów poświęconych temu językowi i jedna z najważniejszych postaci w środowisku Pythona. Poza poprzednimi wydaniami tej książki — w tym przetłumaczonej na język polski wersji „Python. Wprowadzenie” (Helion, 2002), napisał także „Programming Python” oraz „Python Pocket Reference”. Osobiście używa języka Python i promuje go od 1992 roku. Książki na temat tego języka zaczął publikować w 1995 roku, zaś szkolenia z Pythona prowadzi od 1997 roku. Do początku roku 2008 przeprowadził ponad dwieście sesji treningowych poświęconych temu językowi.
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
O autorze: Mark Lutz — to znany na całym świecie instruktor Pythona, autor najwcześniejszych oraz najlepiej sprzedających się tekstów poświęconych temu językowi i jedna z najważniejszych postaci w środowisku Pythona. Poza poprzednimi wydaniami tej książki — w tym przetłumaczonej na język polski wersji „Python. Wprowadzenie” (Helion, 2002), napisał także „Programming Python” oraz „Python Pocket Reference”. Osobiście używa języka Python i promuje go od 1992 roku. Książki na temat tego języka zaczął publikować w 1995 roku, zaś szkolenia z Pythona prowadzi od 1997 roku. Do początku roku 2008 przeprowadził ponad dwieście sesji treningowych poświęconych temu językowi.
Podstawowe informacje |
|
---|---|
Autor | Mark Lutz |
Dodatkowe informacje |
|
Kategorie | Programowanie |
Wybrani autorzy ?Wybrani autorzy to pisarze, którzy wyróżniają się w danej dziedzinie literatury, znani z tworzenia wyjątkowych i cenionych dzieł literackich. | Mark Lutz |
Wybrane wydawnictwa ?Wybrane wydawnictwa to renomowane firmy, które publikują książki, znane z wysokiej jakości, różnorodności tytułów i często specjalizujące się w konkretnych gatunkach literatury. | Helion |
Produkty rekomendowane
Python. Wprowadzenie. Wydanie V (ebook) - Pytania i odpowiedzi
Zastanawiasz się jak poprawnie użytkować zakupiony produkt? Porady na forum naszych ekspertów w mig rozwieją Twoje wątpliwości! Pytania i Odpowiedzi pomogą użytkownikom serwisu w poprawnym korzystaniu i cieszeniu się z nowo zakupionych produktów.
Produkty rekomendowane
Wybrane oferty
-
- Dane i opinie o Helion
- Zobacz ofertę
- O ofercie
-
Zgłoś uwagi
Warianty tego produktu
-
109,45złPython. Wprowadzenie. Wydanie V (ebook)
Python. Wprowadzenie. Wydanie V (ebook) - Pozostałe oferty
-
- Dane i opinie o ebookpoint.pl
- Zobacz ofertę
- O ofercie
-
Zgłoś uwagi
Warianty tego produktu
-
109,45złPython. Wprowadzenie. Wydanie V (ebook)
-
Historia cen - trend cenowy
Aktualnie najniższa cena: 109,45zł
Często kupowane razem
Produkty rekomendowane
Wybrane oferty
?
Python. Wprowadzenie. Wydanie V (ebook) - Opinie
Klienci, którzy kupili Python. Wprowadzenie. Wydanie V (ebook), mogą podzielić się swoją opinią poprzez ankietę Zaufanych Opinii. Prezentujemy wszystkie oceny (zarówno pozytywne jak i negatywne), a Zaufane Opinie oznaczone są zieloną tarczą.
Produkty rekomendowane