Python. Wprowadzenie. Wydanie V (ebook)

Darmowa wysyłka
Wysyłka w 1 dzień

Python. Wprowadzenie. Wydanie V (ebook) - Opis i dane produktu

Python. Wprowadzenie. Wydanie V (ebook) - zdjęcie 2
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.
Python. Wprowadzenie. Wydanie V (ebook) - zdjęcie 3
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ć?
Wymagania wstępne dla użytkowników tej książki
Struktura tej książki
Czym nie jest ta książka

Ta książka nie jest leksykonem ani przewodnikiem po konkretnych zastosowaniach Pythona
To nie jest krótka historia dla ludzi, którzy się spieszą
Ta książka jest tak liniowa, jak na to pozwala Python

O przykładach zamieszczonych w książce

Wersje Pythona
Platformy
Pobieranie kodów źródłowych dla tej książki
Konwencje wykorzystywane w książce
Podziękowania

Trochę wspomnień
Podziękowania dla Pythona
Podziękowania osobiste

Część I Wprowadzenie
Rozdział 1. Pytania i odpowiedzi dotyczące Pythona

Dlaczego ludzie używają Pythona?

Jakość oprogramowania
Wydajność programistów

Czy Python jest językiem skryptowym?
Jakie są wady języka Python?
Kto dzisiaj używa Pythona?
Co mogę zrobić za pomocą Pythona?
Programowanie systemowe
Graficzne interfejsy użytkownika (GUI)
Skrypty internetowe
Integracja komponentów
Programowanie bazodanowe
Szybkie prototypowanie
Programowanie numeryczne i naukowe
I dalej: gry, przetwarzanie obrazu, wyszukiwanie danych, robotyka, Excel

Jak Python jest rozwijany i wspierany?
Kompromisy związane z modelem open source
Jakie są techniczne mocne strony Pythona?

Jest zorientowany obiektowo i funkcyjny
Jest darmowy
Jest przenośny
Ma duże możliwości
Można go łączyć z innymi językami
Jest względnie łatwy w użyciu
Jest względnie łatwy do nauczenia się
Zawdzięcza swoją nazwę Monty Pythonowi

Jak Python wygląda na tle innych języków?
Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 2. Jak Python wykonuje programy?

Wprowadzenie do interpretera Pythona
Wykonywanie programu

Z punktu widzenia programisty
Z punktu widzenia Pythona

Kompilacja kodu bajtowego
Maszyna wirtualna Pythona
Wpływ na wydajność
Wpływ na proces programowania

Warianty modeli wykonywania

Alternatywne implementacje Pythona

CPython standard
Jython Python dla języka Java
IronPython Python dla .NET
Stackless: Python dla programowania współbieżnego
PyPy Python dla szybkości i wydajności

Narzędzia do optymalizacji działania programu

Cython: hybryda Pythona/C
Shed Skin: translator języka Python na C ++
Psyco oryginalny kompilator JIT

Zamrożone pliki binarne
Przyszłe możliwości?

Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 3. Jak wykonuje się programy?

Interaktywny wiersz poleceń

Uruchamianie sesji interaktywnej
Ścieżka systemowa
Nowe opcje systemu Windows w wersji 3.3: PATH, Launcher
Gdzie zapisywać programy katalogi z kodem źródłowym
Czego nie wpisywać znaki zachęty i komentarze
Interaktywne wykonywanie kodu
Do czego służy sesja interaktywna

Eksperymentowanie
Testowanie
Uwagi praktyczne wykorzystywanie sesji interaktywnej
Wpisywanie instrukcji wielowierszowych
Systemowy wiersz poleceń i pliki źródłowe

Pierwszy skrypt
Wykonywanie plików z poziomu wiersza poleceń powłoki
Sposoby użycia wiersza poleceń
Uwagi praktyczne wykorzystywanie wierszy poleceń i plików

Skrypty wykonywalne w stylu uniksowym #!

Podstawy skryptów uniksowych
Sztuczka z wyszukiwaniem programu przy użyciu polecenia env w systemie Unix
Python 3.3 launcher #! w systemie Windows

Klikanie ikon plików

Podstawowe zagadnienia związane z klikaniem ikon plików
Kliknięcie ikony w systemie Windows
Sztuczka z funkcją input
Inne ograniczenia programów uruchamianych kliknięciem ikony

Importowanie i przeładowywanie modułów

Podstawy importowania i przeładowywania modułów
Więcej o modułach atrybuty

Moduły i przestrzenie nazw

Uwagi praktyczne instrukcje import i reload

Wykorzystywanie funkcji exec do wykonywania plików modułów
Interfejs użytkownika środowiska IDLE

Szczegóły uruchamiania środowiska IDLE
Podstawy środowiska IDLE
Wybrane funkcje środowiska IDLE
Zaawansowane narzędzia środowiska IDLE
Uwagi praktyczne korzystanie ze środowiska IDLE

Inne środowiska IDE
Inne opcje wykonywania kodu

Osadzanie wywołań
Zamrożone binarne pliki wykonywalne
Uruchamianie kodu z poziomu edytora tekstu
Jeszcze inne możliwości uruchamiania
Przyszłe możliwości?

Jaką opcję wybrać?
Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi
Sprawdź swoją wiedzę ćwiczenia do części pierwszej

Część II Typy i operacje
Rozdział 4. Wprowadzenie do typów obiektów Pythona

Hierarchia pojęć w Pythonie
Dlaczego korzystamy z typów wbudowanych
Najważniejsze typy danych w Pythonie
Liczby
Łańcuchy znaków

Operacje na sekwencjach
Niezmienność
Metody specyficzne dla typu
Uzyskiwanie pomocy
Inne sposoby kodowania łańcuchów znaków
Ciągi znaków w formacie Unicode
Dopasowywanie wzorców

Listy

Operacje na typach sekwencyjnych
Operacje specyficzne dla typu
Sprawdzanie granic
Zagnieżdżanie
Listy składane

Słowniki

Operacje na odwzorowaniach
Zagnieżdżanie raz jeszcze
Brakujące klucze testowanie za pomocą if
Sortowanie kluczy pętle for
Iteracja i optymalizacja

Krotki
Do czego służą krotki
Pliki

Pliki binarne
Pliki tekstowe Unicode
Inne narzędzia podobne do plików

Inne typy podstawowe

Jak zepsuć elastyczność kodu
Klasy definiowane przez użytkownika
I wszystko inne

Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 5. Typy liczbowe

Podstawy typów liczbowych Pythona

Literały liczbowe
Wbudowane narzędzia liczbowe
Operatory wyrażeń Pythona

Połączone operatory stosują się do priorytetów
Podwyrażenia grupowane są w nawiasach
Pomieszane typy poddawane są konwersji
Wprowadzenie: przeciążanie operatorów i polimorfizm

Liczby w akcji

Zmienne i podstawowe wyrażenia
Formaty wyświetlania liczb
Porównania zwykłe i łączone
Dzielenie klasyczne, bez reszty i prawdziwe

Obsługa różnych wersji Pythona
Dzielenie bez reszty a odcinanie
Dlaczego odcinanie ma znaczenie?

Precyzja liczb całkowitych
Liczby zespolone
Notacja szesnastkowa, ósemkowa i dwójkowa literały i konwersje
Operacje na poziomie bitów
Inne wbudowane narzędzia numeryczne

Inne typy liczbowe

Typ Decimal (liczby dziesiętne)

Typ Decimal zagadnienia podstawowe
Globalne ustawianie precyzji liczb dziesiętnych
Menedżer kontekstu dziesiętnego

Typ Fraction (liczby ułamkowe)

Typ Fraction zagadnienia podstawowe
Dokładność numeryczna ułamków zwykłych i dziesiętnych
Konwersje ułamków i typy mieszane

Zbiory

Podstawy zbiorów w Pythonie 2.6 i wersjach wcześniejszych
Literały zbiorów w Pythonie 3.x i 2.7
Ograniczenia na obiekty niemutowalne i zbiory zamrożone
Zbiory składane w Pythonie 3.x i 2.7
Dlaczego zbiory?

Wartości Boolean

Rozszerzenia numeryczne
Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 6. Wprowadzenie do typów dynamicznych

Sprawa brakujących deklaracji typu

Zmienne, obiekty i referencje
Typy powiązane są z obiektami, a nie ze zmiennymi
Obiekty są uwalniane

Referencje współdzielone

Referencje współdzielone a modyfikacje w miejscu
Referencje współdzielone a równość

Typy dynamiczne są wszędzie
Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 7. Łańcuchy znaków
Co znajdziesz w tym rozdziale
Unicode krótka historia

Łańcuchy znaków podstawy
Literały łańcuchów znaków

Łańcuchy znaków w apostrofach i cudzysłowach są tym samym
Sekwencje ucieczki reprezentują znaki specjalne
Surowe łańcuchy znaków blokują sekwencje ucieczki
Potrójne cudzysłowy i apostrofy kodują łańcuchy znaków będące wielowierszowymi blokami

Łańcuchy znaków w akcji

Podstawowe operacje
Indeksowanie i wycinki

Rozszerzone wycinki trzeci limit i obiekty wycinków
Narzędzia do konwersji łańcuchów znaków
Konwersje kodu znaków
Modyfikowanie łańcuchów znaków
Metody łańcuchów znaków

Składnia wywoływania metod
Metody typów znakowych
Przykłady metod łańcuchów znaków modyfikowanie
Przykłady metod łańcuchów znaków analiza składniowa tekstu
Inne często używane metody łańcuchów znaków
Oryginalny moduł string (usunięty w wersji 3.0)

Wyrażenia formatujące łańcuchy znaków

Formatowanie łańcuchów tekstu z użyciem wyrażeń formatujących podstawy
Składnia zaawansowanych wyrażeń formatujących
Przykłady zaawansowanych wyrażeń formatujących
Wyrażenia formatujące oparte na słowniku

Formatowanie łańcuchów z użyciem metody format

Podstawy
Używanie kluczy, atrybutów i przesunięć
Zaawansowana składnia wywołań metody format
Przykłady zaawansowanego formatowania łańcuchów znaków z użyciem metody format
Porównanie metody format z wyrażeniami formatującymi
Dlaczego miałbyś korzystać z metody format

Dodatkowe możliwości: wbudowane funkcje czy ogólne techniki programowania
Elastyczna składnia odwołań: dodatkowa złożoność i nakładanie się funkcjonalności
Jawne odwołania do wartości: teraz opcjonalne i prawdopodobnie nie będą używane
Nazwy metod i argumenty neutralne kontekstowo estetyka kodu kontra zastosowania praktyczne
Funkcje a wyrażenia: niewielka wygoda

Generalne kategorie typów

Typy z jednej kategorii współdzielą zbiory operacji
Typy mutowalne można modyfikować w miejscu

Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 8. Listy oraz słowniki

Listy
Listy w akcji

Podstawowe operacje na listach
Iteracje po listach i składanie list
Indeksowanie, wycinki i macierze
Modyfikacja list w miejscu

Przypisywanie do indeksu i wycinków
Wywołania metod list
Kilka słów o sortowaniu list
Inne, często stosowane metody list
Inne popularne operacje na listach

Słowniki
Słowniki w akcji

Podstawowe operacje na słownikach
Modyfikacja słowników w miejscu
Inne metody słowników
Przykład baza danych o filmach

Przykład mapowanie wartości na klucze

Uwagi na temat korzystania ze słowników

Wykorzystywanie słowników do symulowania elastycznych list liczby całkowite jako klucze
Wykorzystywanie słowników z rzadkimi strukturami danych krotki jako klucze
Unikanie błędów z brakującymi kluczami
Zagnieżdżanie słowników

Inne sposoby tworzenia słowników
Zmiany dotyczące słowników w Pythonie 3.x i 2.7

Słowniki składane w wersjach 3.x i 2.7
Widoki słowników w wersji 3.x (oraz wersji 2.7 przy użyciu nowych metod)
Widoki słowników i zbiory
Sortowanie kluczy słowników w wersji 3.x
Porównywanie rozmiarów słowników nie działa w 3.x
W wersji 3.x metoda has_key nie istnieje, niech żyje in!

Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 9. Krotki, pliki i wszystko inne
Krotki
Krotki w akcji

Właściwości składni krotek przecinki i nawiasy
Konwersje, metody oraz niemutowalność

Dlaczego istnieją listy i krotki
Repetytorium: rekordy krotki nazwane

Pliki

Otwieranie plików
Wykorzystywanie plików
Pliki w akcji
Pliki tekstowe i binarne krótka historia
Przechowywanie obiektów Pythona w plikach i przetwarzanie ich
Przechowywanie natywnych obiektów Pythona moduł pickle
Przechowywanie obiektów Pythona w formacie JSON
Przechowywanie spakowanych danych binarnych moduł struct
Menedżery kontekstu plików
Inne narzędzia powiązane z plikami

Przegląd i podsumowanie podstawowych typów obiektów

Elastyczność obiektów
Referencje a kopie
Porównania, testy równości i prawda

Porównywania i sortowania typów mieszanych w Pythonie 2.x i 3.x
Porównywanie słowników w Pythonie 2.x i 3.x

Prawda czy fałsz, czyli znaczenie True i False w Pythonie

Obiekt None
Typ bool

Hierarchie typów Pythona
Obiekty typów
Inne typy w Pythonie

Pułapki typów wbudowanych

Przypisanie tworzy referencje, nie kopie
Powtórzenie dodaje jeden poziom zagłębienia
Uwaga na cykliczne struktury danych
Typów niemutowalnych nie można modyfikować w miejscu

Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi
Sprawdź swoją wiedzę ćwiczenia do części drugiej

Część III Instrukcje i składnia
Rozdział 10. Wprowadzenie do instrukcji Pythona

Raz jeszcze o hierarchii pojęciowej języka Python
Instrukcje Pythona
Historia dwóch if

Co dodaje Python
Co usuwa Python

Nawiasy są opcjonalne
Koniec wiersza jest końcem instrukcji
Koniec wcięcia to koniec bloku

Skąd bierze się składnia z użyciem wcięć
Kilka przypadków specjalnych

Przypadki specjalne dla reguły o końcu wiersza
Przypadki specjalne dla reguły o wcięciach bloków

Szybki przykład interaktywne pętle

Prosta pętla interaktywna
Wykonywanie obliczeń na danych wpisywanych przez użytkownika
Obsługa błędów poprzez sprawdzanie danych wejściowych
Obsługa błędów za pomocą instrukcji try

Obsługa liczb zmiennoprzecinkowych

Kod zagnieżdżony na trzy poziomy głębokości

Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 11. Przypisania, wyrażenia i wyświetlanie

Instrukcje przypisania

Formy instrukcji przypisania
Przypisanie sekwencji

Zaawansowane wzorce przypisywania sekwencji

Rozszerzona składnia rozpakowania sekwencji w Pythonie 3.x

Rozszerzona składania rozpakowania w działaniu
Przypadki brzegowe
Wygodny gadżet
Zastosowanie w pętli for

Przypisanie z wieloma celami
Przypisanie z wieloma celami a współdzielone referencje
Przypisania rozszerzone
Przypisania rozszerzone a współdzielone referencje
Reguły dotyczące nazw zmiennych

Konwencje dotyczące nazewnictwa
Nazwy nie mają typu, ale obiekty tak

Instrukcje wyrażeń
Instrukcje wyrażeń i modyfikacje w miejscu
Polecenia print
Funkcja print z Pythona 3.x

Format wywołania
Funkcja print z wersji 3.x w działaniu

Instrukcja print w Pythonie 2.x

Formy instrukcji
Instrukcja print Pythona 2.x w działaniu

Przekierowanie strumienia wyjściowego

Program Witaj, świecie!
Ręczne przekierowanie strumienia wyjścia
Automatyczne przekierowanie strumienia

Wyświetlanie niezależne od wersji

Konwerter 2to3
Importowanie z __future__
Neutralizacja różnic w wyświetlaniu za pomocą kodu

Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 12. Testy if i reguły składni

Instrukcje if

Ogólny format
Proste przykłady
Rozgałęzienia kodu

Obsługa domyślnych wartości wyboru
Obsługa bardziej złożonych operacji

Reguły składni Pythona raz jeszcze

Ograniczniki bloków reguły tworzenia wcięć

Unikaj mieszania tabulatorów i spacji nowa opcja sprawdzania błędów w Pythonie 3.x

Ograniczniki instrukcji wiersze i znaki kontynuacji
Kilka przypadków specjalnych

Testy prawdziwości i testy logiczne
Wyrażenie trójargumentowe if/else
Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 13. Pętle while i for

Pętle while

Ogólny format
Przykłady

Instrukcje break, continue, pass oraz else w pętli

Ogólny format pętli
Instrukcja pass
Instrukcja continue
Instrukcja break
Klauzula else pętli

Więcej o części pętli else

Pętle for

Ogólny format
Przykłady

Podstawowe zastosowanie
Inne typy danych
Przypisanie krotek w pętli for
Rozszerzone przypisanie sekwencji w pętlach for w Pythonie 3.x
Zagnieżdżone pętle for

Techniki tworzenia pętli

Pętle z licznikami range
Skanowanie sekwencji pętla while z funkcją range kontra pętla for
Przetasowania sekwencji funkcje range i len
Przechodzenie niewyczerpujące range kontra wycinki
Modyfikowanie list range kontra listy składane
Przechodzenie równoległe zip oraz map

Równoznaczność funkcji map w Pythonie 2.x
Tworzenie słowników za pomocą funkcji zip

Generowanie wartości przesunięcia i elementów enumerate

Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 14. Iteracje i listy składane

Iteracje pierwsze spojrzenie

Protokół iteracyjny iteratory plików
Iterowanie ręczne iter i next

Pełny protokół iteracji
Iteracje ręczne

Inne wbudowane typy iterowalne

Listy składane wprowadzenie

Podstawy list składanych
Wykorzystywanie list składanych w plikach
Rozszerzona składnia list składanych

Klauzula filtrująca: if
Zagnieżdżone pętle: klauzula for

Inne konteksty iteracyjne
Nowe obiekty iterowalne w Pythonie 3.x

Wpływ na kod w wersji 2.x zalety i wady
Obiekt iterowalny range
Obiekty iterowalne map, zip i filter
Iteratory wielokrotne kontra pojedyncze
Obiekty iterowalne widoki słownika

Inne zagadnienia związane z iteracjami
Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 15. Wprowadzenie do dokumentacji

Źródła dokumentacji Pythona

Komentarze ze znakami #
Funkcja dir
Notki dokumentacyjne __doc__

Notki dokumentacyjne zdefiniowane przez użytkownika
Standardy i priorytety notek dokumentacyjnych
Wbudowane notki dokumentacyjne

PyDoc funkcja help
PyDoc raporty HTML

Python 3.2 i nowsze wersje: tryb PyDoc dla wszystkich przeglądarek
Python 3.2 i wersje wcześniejsze: klient GUI

Nie tylko notki docstrings pakiet Sphinx
Zbiór standardowej dokumentacji
Zasoby internetowe
Publikowane książki

Często spotykane problemy programistyczne
Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi
Sprawdź swoją wiedzę ćwiczenia do części trzeciej

Część IV Funkcje i generatory
Rozdział 16. Podstawy funkcji

Dlaczego używamy funkcji
Tworzenie funkcji

Instrukcje def
Instrukcja def uruchamiana jest w czasie wykonania

Pierwszy przykład definicje i wywoływanie

Definicja
Wywołanie
Polimorfizm w Pythonie

Drugi przykład przecinające się sekwencje

Definicja
Wywołania
Raz jeszcze o polimorfizmie
Zmienne lokalne

Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 17. Zasięgi

Podstawy zasięgów w Pythonie

Reguły dotyczące zasięgów
Rozwiązywanie nazw reguła LEGB

Inne zasięgi Pythona przegląd

Przykład zasięgu
Zasięg wbudowany

Przedefiniowanie wbudowanych nazw: lepiej czy gorzej?

Instrukcja global

Projektowanie programów: minimalizowanie stosowania zmiennych globalnych
Projektowanie programów: minimalizowanie modyfikacji dokonywanych pomiędzy plikami
Inne metody dostępu do zmiennych globalnych

Zasięgi a funkcje zagnieżdżone

Szczegóły dotyczące zasięgów zagnieżdżonych
Przykłady zasięgów zagnieżdżonych
Funkcje fabrykujące: domknięcia

Proste funkcje fabrykujące
Funkcje fabrykujące kontra klasy, runda pierwsza

Zachowywanie stanu zasięgu zawierającego za pomocą argumentów domyślnych

Zasięgi zagnieżdżone, wartości domyślne i wyrażenia lambda
Zmienne pętli mogą wymagać wartości domyślnych, a nie zasięgów
Dowolne zagnieżdżanie zasięgów

Instrukcja nonlocal w Pythonie 3.x

Podstawy instrukcji nonlocal
Instrukcja nonlocal w akcji

Użycie zmiennych nielokalnych w celu modyfikacji
Przypadki graniczne

Czemu służą zmienne nonlocal? Opcje zachowania stanu

Zachowanie stanu: zmienne nonlocal (tylko w wersji 3.x)
Zachowanie stanu: zmienne globalne tylko jedna kopia
Zachowanie stanu: klasy jawne atrybuty (wprowadzenie)
Zachowanie stanu: atrybuty funkcji (w wersjach 3.x i 2.x)

Zachowanie stanu: obiekty mutowalne duchy przeszłości języka Pyton?

Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 18. Argumenty

Podstawy przekazywania argumentów

Argumenty a współdzielone referencje
Unikanie modyfikacji argumentów mutowalnych
Symulowanie parametrów wyjścia i wielu wyników działania

Specjalne tryby dopasowywania argumentów

Podstawy dopasowywania argumentów
Składnia dopasowania argumentów
Dopasowywanie argumentów szczegóły
Przykłady ze słowami kluczowymi i wartościami domyślnymi

Słowa kluczowe
Wartości domyślne
Łączenie słów kluczowych i wartości domyślnych

Przykłady dowolnych argumentów

Nagłówki: zbieranie argumentów
Wywołania: rozpakowywanie argumentów
Ogólne zastosowanie funkcji
Zlikwidowana wbudowana funkcja apply (Python 2.x)

Argumenty tylko ze słowami kluczowymi (z Pythona 3.x)

Reguły dotyczące kolejności
Czemu służą argumenty ze słowami kluczowymi?

Przykład z funkcją obliczającą minimum

Pełne rozwiązanie
Dodatkowy bonus
Puenta

Uogólnione funkcje działające na zbiorach
Emulacja funkcji print z Pythona 3.0

Wykorzystywanie argumentów ze słowami kluczowymi

Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 19. Zaawansowane zagadnienia dotyczące funkcji

Koncepcje projektowania funkcji
Funkcje rekurencyjne

Sumowanie z użyciem rekurencji
Implementacje alternatywne
Pętle a rekurencja
Obsługa dowolnych struktur

Rekurencja kontra kolejki i stosy
Cykle, ścieżki i ograniczenia stosu
Więcej przykładów rekurencji

Obiekty funkcji atrybuty i adnotacje

Pośrednie wywołania funkcji obiekty pierwszej klasy
Introspekcja funkcji
Atrybuty funkcji
Adnotacje funkcji w Pythonie 3.x

Funkcje anonimowe lambda

Podstawy wyrażeń lambda
Po co używamy wyrażeń lambda

Wielotorowe rozgałęzienia kodu finał

Jak (nie) zaciemniać kodu napisanego w Pythonie
Zasięgi: wyrażenia lambda również można zagnieżdżać

Narzędzia programowania funkcyjnego

Odwzorowywanie funkcji na obiekty iterowalne map
Wybieranie elementów obiektów iterowalnych funkcja filter
Łączenie elementów obiektów iterowalnych funkcja reduce

Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 20. Listy składane i generatory

Listy składane i narzędzia funkcyjne

Listy składane kontra funkcja map
Dodajemy warunki i pętle zagnieżdżone filter

Formalna składnia list składanych

Przykład listy składane i macierze
Nie nadużywaj list składanych: reguła KISS

Druga strona medalu: wydajność, zwięzłość, ekspresyjność
Funkcje i wyrażenia generatorów
Funkcje generatorów yield kontra return

Zawieszanie stanu
Integracja protokołu iteracji
Funkcje generatorów w działaniu
Dlaczego funkcje generatorów?
Rozszerzony protokół funkcji generatorów send kontra next

Wyrażenia generatorów obiekty iterowalne spotykają złożenia

Dlaczego wyrażenia generatora?
Wyrażenia generatora a funkcja map
Wyrażenia generatora a filtry

Funkcje generatorów a wyrażenia generatorów
Generatory są obiektami o jednoprzebiegowej iteracji
Generowanie wyników we wbudowanych typach, narzędziach i klasach

Generatory i narzędzia biblioteczne: skanery katalogów
Generatory i funkcje aplikacji
Przegląd: obiekty iterowalne definiowane przez użytkownika w klasach

Przykład generowanie mieszanych sekwencji

Sekwencje mieszające
Proste funkcje
Funkcje generatora
Wyrażenia generatora
Funkcja tester
Permutacje: wszystkie możliwe kombinacje

Nie nadużywaj generatorów: reguła EIBTI

Inne spojrzenie: miejsce i czas, zwięzłość, ekspresyjność

Przykład emulowanie funkcji zip i map za pomocą narzędzi iteracyjnych

Tworzymy własną implementację funkcji map
Własna wersja funkcji zip(...) i map(None, ...)

Podsumowanie obiektów składanych

Zakresy i zmienne składane
Zrozumieć zbiory i słowniki składane
Rozszerzona składnia zbiorów i słowników składanych

Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 21. Wprowadzenie do pomiarów wydajności

Pomiary wydajności iteracji

Moduł pomiaru czasu domowej roboty
Skrypt mierzący wydajność
Wyniki pomiarów czasu

Wpływ wywołań funkcji: map
Inne rozwiązania dla modułu do pomiaru czasu
Użycie argumentów ze słowami kluczowymi w wersji 3.x
Inne sugestie
Mierzenie czasu iteracji z wykorzystaniem modułu timeit
Podstawowe reguły korzystania z modułu timeit

Interaktywne użycie i wywołania API
Korzystanie z poziomu wiersza polecenia
Mierzenie czasu działania instrukcji wielowierszowych
Inne tryby użytkowania: instalacje, podsumowania i obiekty

Moduł i skrypt testujący z użyciem modułu timeit
Wyniki działania skryptu testującego
Jeszcze trochę zabawy z mierzeniem wydajności

Wygrana funkcji map i rzadka porażka PyPy
Jeszcze kilka słów o wpływie wywołań funkcji
Techniki porównywania własne funkcje kontra moduł timeit
Możliwości ulepszenia kod instalacyjny

Inne zagadnienia związane z mierzeniem szybkości działania kodu test pystone
Pułapki związane z funkcjami

Lokalne nazwy są wykrywane w sposób statyczny
Wartości domyślne i obiekty mutowalne
Funkcje, które nie zwracają wyników
Różne problemy związane z funkcjami

Otaczanie zasięgów i zmiennych pętli: funkcje fabrykujące
Ukrywanie wbudowanych funkcji przez przypisania: cieniowanie

Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi
Sprawdź swoją wiedzę ćwiczenia do części czwartej

Część V Moduły i pakiety
Rozdział 22. Moduły wprowadzenie

Dlaczego używamy modułów
Architektura programu w Pythonie

Struktura programu
Importowanie i atrybuty
Moduły biblioteki standardowej

Jak działa importowanie

1. Odszukanie modułu
2. Kompilowanie (o ile jest to potrzebne)
3. Wykonanie

Pliki kodu bajtowego __pycache__ w Pythonie 3.2+
Modele plików kodu bajtowego w akcji
Ścieżka wyszukiwania modułów

Konfigurowanie ścieżki wyszukiwania
Wariacje ścieżki wyszukiwania modułów
Lista sys.path
Wybór pliku modułu

Kody źródłowe modułów
Priorytety wyboru
Importowanie punktów zaczepienia i plików ZIP
Pliki zoptymalizowanego kodu bajtowego

Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 23. Podstawy tworzenia modułów

Tworzenie modułów

Nazwy modułów
Inne rodzaje modułów

Używanie modułów

Instrukcja import
Instrukcja from
Instrukcja from *
Operacja importowania jest przeprowadzana tylko raz

Kod inicjalizujący

Instrukcje import oraz from są przypisaniami

Modyfikowanie elementów mutowalnych w modułach
Modyfikowanie nazw pomiędzy plikami

Równoważność instrukcji import oraz from
Potencjalne pułapki związane z użyciem instrukcji from

Kiedy wymagane jest stosowanie instrukcji import

Przestrzenie nazw modułów

Pliki generują przestrzenie nazw
Słowniki przestrzeni nazw: __dict__
Kwalifikowanie nazw atrybutów
Importowanie a zasięgi
Zagnieżdżanie przestrzeni nazw

Przeładowywanie modułów

Podstawy przeładowywania modułów
Przykład przeładowywania z użyciem reload

Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 24. Pakiety modułów

Podstawy importowania pakietów

Pakiety a ustawienia ścieżki wyszukiwania
Pliki pakietów __init__.py

Role pliku inicjalizacji pakietu
Przykład importowania pakietu
Instrukcja from a instrukcja import w importowaniu pakietów
Do czego służy importowanie pakietów
Historia trzech systemów
Względne importowanie pakietów

Zmiany w Pythonie 3.0
Podstawy importowania względnego
Do czego służą importy względne

Importowanie względne w wersji 3.x
Względne importy a bezwzględne ścieżki pakietów

Zasięg importów względnych
Podsumowanie reguł wyszukiwania modułów
Importy względne w działaniu

Importowanie spoza pakietów
Importy wewnątrz pakietów
Importy są nadal względne w stosunku do bieżącego katalogu roboczego
Użycie importów względnych i bezwzględnych
Importy względne przeszukują tylko pakiety
Importy są nadal względne w stosunku do katalogu roboczego (cd.)

Pułapki związane z importem względnym w pakietach: zastosowania mieszane

Problem
Rozwiązanie nr 1: podkatalogi pakietów
Rozwiązanie 2: import bezwzględny z użyciem pełnej ścieżki
Przykład: aplikacja z kodem autotestu modułu (wprowadzenie)

Pakiety przestrzeni nazw w Pythonie 3.3
Semantyka pakietów przestrzeni nazw
Algorytm importu

Wpływ na zwykłe pakiety: opcjonalne pliki __init__.py
Pakiety przestrzeni nazw w akcji
Zagnieżdżanie pakietów przestrzeni nazw
Pliki nadal mają pierwszeństwo przed katalogami

Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 25. Zaawansowane zagadnienia związane z modułami

Koncepcje związane z projektowaniem modułów
Ukrywanie danych w modułach

Minimalizacja niebezpieczeństw użycia from * _X oraz __all__

Włączanie opcji z przyszłych wersji Pythona: __future__
Mieszane tryby użycia __name__ oraz __main__

Testy jednostkowe z wykorzystaniem atrybutu __name__

Przykład kod działający w dwóch trybach

Symbole walut: Unicode w akcji
Notki dokumentacyjne: dokumentacja modułu w działaniu

Modyfikacja ścieżki wyszukiwania modułów
Rozszerzenie as dla instrukcji import oraz from
Przykład moduły są obiektami
Importowanie modułów z użyciem nazwy w postaci ciągu znaków

Uruchamianie ciągów znaków zawierających kod
Bezpośrednie wywołania: dwie opcje

Przykład przechodnie przeładowywanie modułów
Przeładowywanie rekurencyjne
Testowanie przeładowań rekurencyjnych
Rozwiązania alternatywne
Testowanie wariantów przeładowania
Pułapki związane z modułami

Kolizje nazw modułów: pakiety i importowanie względne w pakietach
W kodzie najwyższego poziomu kolejność instrukcji ma znaczenie
Instrukcja from kopiuje nazwy, jednak łącza już nie
Instrukcja from * może zaciemnić znaczenie zmiennych
Funkcja reload może nie mieć wpływu na obiekty importowane za pomocą from
Funkcja reload i instrukcja from a testowanie interaktywne
Rekurencyjne importowanie za pomocą from może nie działać

Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi
Sprawdź swoją wiedzę ćwiczenia do części piątej

Część VI Klasy i programowanie zorientowane obiektowo
Rozdział 26. Programowanie zorientowane obiektowo wprowadzenie

Po co używa się klas
Programowanie zorientowane obiektowo z dystansu

Wyszukiwanie atrybutów dziedziczonych
Klasy a instancje
Wywołania metod klasy
Tworzenie drzew klas
Przeciążanie operatorów
Programowanie zorientowane obiektowo oparte jest na ponownym wykorzystaniu kodu

Polimorfizm i klasy
Programowanie przez dostosowanie

Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 27. Podstawy tworzenia klas

Klasy generują wiele obiektów instancji

Obiekty klas udostępniają zachowania domyślne
Obiekty instancji są rzeczywistymi elementami
Pierwszy przykład

Klasy dostosowujemy do własnych potrzeb przez dziedziczenie

Drugi przykład
Klasy są atrybutami w modułach

Klasy mogą przechwytywać operatory Pythona
Trzeci przykład
Zwracamy wyniki lub nie
Po co przeciążamy operatory
Najprostsza klasa Pythona na świecie
Jeszcze kilka słów o rekordach: klasy kontra słowniki

Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 28. Bardziej realistyczny przykład

Krok 1. tworzenie instancji

Tworzenie konstruktorów
Testowanie w miarę pracy
Wykorzystywanie kodu na dwa sposoby

Krok 2. dodawanie metod
Tworzenie kodu metod
Krok 3. przeciążanie operatorów
Udostępnienie sposobów wyświetlania
Krok 4. dostosowywanie zachowania za pomocą klas podrzędnych

Tworzenie klas podrzędnych
Rozszerzanie metod niepoprawny sposób
Rozszerzanie metod poprawny sposób
Polimorfizm w akcji
Dziedziczenie, dostosowanie do własnych potrzeb i rozszerzenie
Programowanie zorientowane obiektowo idea

Krok 5. dostosowanie do własnych potrzeb także konstruktorów

Programowanie zorientowane obiektowo jest prostsze, niż się wydaje
Inne sposoby łączenia klas

Krok 6. wykorzystywanie narzędzi do introspekcji

Specjalne atrybuty klas
Uniwersalne narzędzie do wyświetlania
Atrybuty instancji a atrybuty klas
Nazwy w klasach narzędziowych
Ostateczna postać naszych klas

Krok 7. i ostatni przechowywanie obiektów w bazie danych

Obiekty pickle i shelve

Moduł pickle
Moduł shelve

Przechowywanie obiektów w bazie danych za pomocą shelve
Interaktywna eksploracja obiektów shelve
Uaktualnianie obiektów w pliku shelve

Przyszłe kierunki rozwoju
Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 29. Szczegóły kodowania klas

Instrukcja class

Ogólna forma
Przykład

Metody

Przykład metody
Wywoływanie konstruktorów klas nadrzędnych
Inne możliwości wywoływania metod

Dziedziczenie

Tworzenie drzewa atrybutów
Specjalizacja odziedziczonych metod
Techniki interfejsów klas
Abstrakcyjne klasy nadrzędne

Abstrakcyjne klasy nadrzędne z Pythona 3.x oraz 2.6+: wprowadzenie

Przestrzenie nazw cała historia

Proste nazwy globalne, o ile nie są przypisane
Nazwy atrybutów przestrzenie nazw obiektów
Zen przestrzeni nazw Pythona przypisania klasyfikują zmienne
Klasy zagnieżdżone jeszcze kilka słów o regule LEGB
Słowniki przestrzeni nazw przegląd
Łącza przestrzeni nazw przechodzenie w górę drzewa klas

Raz jeszcze o notkach dokumentacyjnych
Klasy a moduły
Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 30. Przeciążanie operatorów

Podstawy

Konstruktory i wyrażenia __init__ i __sub__
Często spotykane metody przeciążania operatorów

Indeksowanie i wycinanie __getitem__ i __setitem__

Wycinki
Wycinanie i indeksowanie w Pythonie 2.x
Metoda __index__ w wersji 3.x nie służy do indeksowania!

Iteracja po indeksie __getitem__
Obiekty iteratorów __iter__ i __next__

Iteratory zdefiniowane przez użytkownika

Skanowanie pojedyncze i wielokrotne
Klasy i generatory

Wiele iteracji po jednym obiekcie
Klasy i wycinki
Alternatywa: metoda__iter__ i instrukcja yield
Wielokrotne iteracje za pomocą instrukcji yield

Test przynależności __contains__, __iter__ i __getitem__
Dostęp do atrybutów __getattr__ oraz __setattr__

Odwołania do atrybutów
Przypisywanie wartości i usuwanie atrybutów
Inne narzędzia do zarządzania atrybutami
Emulowanie prywatności w atrybutach instancji

Reprezentacje łańcuchów __repr__ oraz __str__

Po co nam dwie metody wyświetlania?
Uwagi dotyczące wyświetlania

Dodawanie prawostronne i miejscowa modyfikacja: metody __radd__ i __iadd__

Dodawanie prawostronne

Stosowanie metody __add__ w __radd__
Eskalowanie typu klasy

Dodawanie w miejscu
Wywołania __call__
Interfejsy funkcji i kod oparty na wywołaniach zwrotnych
Porównania __lt__, __gt__ i inne
Metoda __cmp__ w 2.x
Testy logiczne __bool__ i __len__
Metody logiczne w Pythonie 2.x
Destrukcja obiektu __del__
Uwagi dotyczące stosowania destruktorów

Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 31. Projektowanie z użyciem klas
Python a programowanie zorientowane obiektowo
Polimorfizm to interfejsy, a nie sygnatury wywołań

Programowanie zorientowane obiektowo i dziedziczenie związek jest
Programowanie zorientowane obiektowo i kompozycja związki typu ma

Raz jeszcze procesor strumienia danych

Programowanie zorientowane obiektowo a delegacja obiekty opakowujące
Pseudoprywatne atrybuty klas

Przegląd zniekształcania nazw zmiennych
Po co używa się atrybutów pseudoprywatnych

Metody są obiektami z wiązaniem i bez wiązania

W wersji 3.x metody niezwiązane są funkcjami
Metody związane i inne obiekty wywoływane

Inne obiekty wywoływane
Klasy są obiektami uniwersalne fabryki obiektów
Do czego służą fabryki
Dziedziczenie wielokrotne klasy mieszane
Tworzenie klas mieszanych

Odczyt listy atrybutów obiektu __dict__
Wydobywanie atrybutów odziedziczonych z użyciem dir()
Wypisywanie atrybutów dla każdego obiektu w drzewie klas
Uruchomienie kodu wyświetlającego drzewo
Inny przykład użycia: wyświetlenie nazw zawierających znaki podkreślenia
Inny przykład użycia: uruchomienie kodu z większymi modułami
Moduł kolektora
Miejsce na udoskonalenia: algorytm MRO, sloty, interfejsy graficzne

Inne zagadnienia związane z projektowaniem
Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 32. Zaawansowane zagadnienia związane z klasami

Rozszerzanie typów wbudowanych

Rozszerzanie typów za pomocą osadzania
Rozszerzanie typów za pomocą klas podrzędnych

Klasy w nowym stylu
Jak nowy jest nowy styl
Nowości w klasach w nowym stylu
Pomijanie instancji we wbudowanych operacjach przy pobieraniu atrybutów

Dlaczego zmieniło się wyszukiwanie?
Implikacje wynikające z przechwytywania atrybutów
Wymogi kodowania obiektów pośredniczących
Więcej informacji

Zmiany w modelu typów
Konsekwencje z perspektywy kontroli typów
Wszystkie obiekty dziedziczą po klasie object
Implikacje wynikające z użycia metod domyślnych
Zmiany w dziedziczeniu diamentowym

Implikacje wynikające z dziedziczenia diamentowego
Jawne rozwiązywanie konfliktów
Zakres zmian kolejności wyszukiwania

Więcej o kolejności odwzorowywania nazw

Algorytm MRO
Śledzenie algorytmu MRO

Przykład wiązanie atrybutów ze źródłami dziedziczenia
Nowości w klasach w nowym stylu
Sloty: deklaracje atrybutów

Podstawy slotów
Sloty i słowniki przestrzeni nazw
Wiele slotów w klasach nadrzędnych
Generyczna obsługa slotów i innych wirtualnych atrybutów
Zasady używania slotów
Przykład stosowania slotów: klasa ListTree i funkcja mapattrs
Co z szybkością slotów?

Właściwości klas: dostęp do atrybutów

Podstawy właściwości

Narzędzia atrybutów: __getattribute__ i deskryptory
Inne zmiany i rozszerzenia klas

Metody statyczne oraz metody klasy

Do czego potrzebujemy metod specjalnych
Metody statyczne w 2.x i 3.x
Alternatywy dla metod statycznych
Używanie metod statycznych i metod klas
Zliczanie instancji z użyciem metod statycznych
Zliczanie instancji z metodami klas

Zliczanie instancji dla każdej z klas z użyciem metod klas

Dekoratory i metaklasy część 1.

Podstawowe informacje o dekoratorach funkcji
Pierwsze spojrzenie na funkcję dekoratora zdefiniowaną przez użytkownika
Pierwsze spojrzenie na dekoratory klas i metaklasy
Dalsza lektura

Wbudowana funkcja super: zmiana na lepsze czy na gorsze?

Wielka debata o funkcji super
Tradycyjny, uniwersalny i ogólny sposób wywoływania klasy nadrzędnej
Podstawy i kompromisy użycia funkcji super

Stara semantyka: magiczny obiekt pośredniczący w wersji 3.x
Pułapka: beztroskie stosowanie wielokrotnego dziedziczenia
Ograniczenie: przeciążanie operatorów
Różnice w użyciu w wersji 2.x: rozbudowane wywołania

Zalety funkcji super: zmiany drzewa i kierowania metod
Zmiana klasy w trakcie działania programu a funkcja super
Kooperatywne kierowanie metod w drzewie wielokrotnego dziedziczenia

Podstawy: kooperatywne wywołanie funkcji super w akcji
Ograniczenie: wymóg zakotwiczenia łańcucha wywołań
Zakresy: model wszystko lub nic
Elastyczność założenia dotyczącego kolejności wywołań
Dostosowywanie: zastąpienie metody
Sprzęganie: zastosowanie w mieszaniu klas
Dostosowywanie: wymóg takich samych argumentów

Podsumowanie funkcji super

Pułapki związane z klasami

Modyfikacja atrybutów klas może mieć efekty uboczne
Modyfikowanie mutowalnych atrybutów klas również może mieć efekty uboczne
Dziedziczenie wielokrotne kolejność ma znaczenie
Zakresy w metodach i klasach
Różne pułapki związane z klasami

Rozsądnie wybieraj miejsce przechowywania atrybutu w instancji lub w klasie
Zazwyczaj wywołuj konstruktory klasy nadrzędnej
Klasy wykorzystujące delegację w 3.x __getattr__ i funkcje wbudowane

Przesadne opakowywanie

Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi
Sprawdź swoją wiedzę ćwiczenia do części szóstej

Część VII Wyjątki oraz narzędzia
Rozdział 33. Podstawy wyjątków

Po co używa się wyjątków
Role wyjątków
Wyjątki w skrócie

Domyślny program obsługi wyjątków
Przechwytywanie wyjątków
Zgłaszanie wyjątków
Wyjątki zdefiniowane przez użytkownika
Działania końcowe

Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 34. Szczegółowe informacje dotyczące wyjątków

Instrukcja try/except/else

Jak działa instrukcja try
Części instrukcji try

Przechwytywanie wybranych i wszystkich wyjątków
Przechwytywanie wszystkich wyjątków: pusta instrukcja except i klasa Exception

Część try/else
Przykład zachowanie domyślne
Przykład przechwytywanie wbudowanych wyjątków

Instrukcja try/finally
Przykład działania kończące kod z użyciem try/finally
Połączona instrukcja try/except/finally

Składnia połączonej instrukcji try
Łączenie finally oraz except za pomocą zagnieżdżania
Przykład połączonego try

Instrukcja raise

Zgłaszanie wyjątków
Zakresy widoczności zmiennych w instrukcjach try i except
Przekazywanie wyjątków za pomocą raise
Łańcuchy wyjątków w Pythonie 3.x raise from

Instrukcja assert
Przykład wyłapywanie ograniczeń (ale nie błędów!)
Menedżery kontekstu with/as

Podstawowe zastosowanie
Protokół zarządzania kontekstem
Kilka menedżerów kontekstu w wersjach 3.1, 2.7 i nowszych

Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 35. Obiekty wyjątków

Wyjątki powrót do przyszłości

Wyjątki oparte na łańcuchach znaków znikają
Wyjątki oparte na klasach
Tworzenie klas wyjątków

Do czego służą hierarchie wyjątków
Wbudowane klasy wyjątków

Kategorie wbudowanych wyjątków
Domyślne wyświetlanie oraz stan

Własne sposoby wyświetlania
Własne dane oraz zachowania

Udostępnianie szczegółów wyjątku
Udostępnianie metod wyjątków

Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 36. Projektowanie z wykorzystaniem wyjątków

Zagnieżdżanie programów obsługi wyjątków

Przykład zagnieżdżanie przebiegu sterowania
Przykład zagnieżdżanie składniowe

Zastosowanie wyjątków

Wychodzenie z głęboko zagnieżdżonych pętli: instrukcja go to
Wyjątki nie zawsze są błędami
Funkcje mogą sygnalizować warunki za pomocą raise
Zamykanie plików oraz połączeń z serwerem
Debugowanie z wykorzystaniem zewnętrznych instrukcji try
Testowanie kodu wewnątrz tego samego procesu
Więcej informacji na temat funkcji sys.exc_info
Wyświetlanie błędów i śladów stosu

Wskazówki i pułapki dotyczące projektowania wyjątków

Co powinniśmy opakować w try
Jak nie przechwytywać zbyt wiele unikanie pustych except i wyjątków
Jak nie przechwytywać zbyt mało korzystanie z kategorii opartych na klasach

Podsumowanie podstaw języka Python

Zbiór narzędzi Pythona
Narzędzia programistyczne przeznaczone do większych projektów

Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi
Sprawdź swoją wiedzę ćwiczenia do części siódmej

Część VIII Zagadnienia zaawansowane
Rozdział 37. Łańcuchy znaków Unicode oraz łańcuchy bajtowe

Zmiany w łańcuchach znaków w Pythonie 3.x
Podstawy łańcuchów znaków

Kodowanie znaków
Jak Python zapisuje ciągi znaków w pamięci
Typy łańcuchów znaków Pythona

Po co są stosowane różne typy ciągów?
Pliki binarne i tekstowe
Podstawy kodowania ciągów znaków
Literały tekstowe w Pythonie 3.x
Literały Unicode w Pythonie 2.x i 3.3

Literały tekstowe w Pythonie 2.x
Konwersje typów ciągów

Kod łańcuchów znaków Unicode

Kod tekstu z zakresu ASCII
Kod tekstu spoza zakresu ASCII
Kodowanie i dekodowanie tekstu spoza zakresu ASCII
Inne techniki kodowania łańcuchów Unicode
Literały bajtowe
Konwersja kodowania
Łańcuchy znaków Unicode w Pythonie 2.x

Mieszanie typów ciągów w wersji 2.x
Deklaracje typu kodowania znaków pliku źródłowego
Wykorzystywanie obiektów bytes z Pythona 3.x

Wywołania metod
Operacje na sekwencjach
Inne sposoby tworzenia obiektów bytes
Mieszanie typów łańcuchów znaków

Obiekt bytearray w wersji 3.x (oraz 2.6 lub nowszej)

Typ bytearray w akcji
Podsumowanie typów ciągów znaków w Pythonie 3.x

Wykorzystywanie plików tekstowych i binarnych

Podstawy plików tekstowych
Tryby tekstowy i binarny w Pythonie 2.x i 3.x
Brak dopasowania typu i zawartości w Pythonie 3.x

Wykorzystywanie plików Unicode

Odczyt i zapis Unicode w Pythonie 3.x

Kodowanie ręczne
Kodowanie danych wyjściowych pliku
Dekodowanie danych wejściowych pliku
Dekodowanie błędnych dopasowań

Obsługa BOM w Pythonie 3.x

Pomijanie znacznika BOM w Notatniku
Pomijanie znacznika BOM w Pythonie

Pliki Unicode w Pythonie 2.x
Unicode w nazwach plików i w strumieniach

Nazwy plików: znaki i bajty
Zawartość strumienia: zmienna PYTHONIOENCODING

Inne zmiany w narzędziach do przetwarzania łańcuchów znaków w Pythonie 3.x

Moduł dopasowywania wzorców re
Moduł danych binarnych struct
Moduł serializacji obiektów pickle
Narzędzia do analizy składniowej XML

Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 38. Zarządzane atrybuty
Po co zarządza się atrybutami
Wstawianie kodu wykonywanego w momencie dostępu do atrybutów
Właściwości

Podstawy
Pierwszy przykład
Obliczanie atrybutów
Zapisywanie właściwości w kodzie za pomocą dekoratorów

Dekoratory setter i deleter
Deskryptory
Podstawy

Argumenty metod deskryptorów
Deskryptory tylko do odczytu

Pierwszy przykład
Obliczone atrybuty
Wykorzystywanie informacji o stanie w deskryptorach
Powiązania pomiędzy właściwościami a deskryptorami

Deskryptory, sloty i nie tylko
Metody __getattr__ oraz __getattribute__
Podstawy
Unikanie pętli w metodach przechwytujących atrybuty
Pierwszy przykład
Metoda __getattribute__
Obliczanie atrybutów
Metoda __getattribute__

Porównanie metod __getattr__ oraz __getattribute__
Porównanie technik zarządzania atrybutami
Przechwytywanie atrybutów wbudowanych operacji

Powrót do menedżerów opartych na delegacji
Przykład sprawdzanie poprawności atrybutów
Wykorzystywanie właściwości do sprawdzania poprawności
Testowanie kodu
Wykorzystywanie deskryptorów do sprawdzania poprawności

Opcja 1: sprawdzanie z wykorzystaniem współdzielonego stanu deskryptora instancji
Opcja 2: sprawdzanie z wykorzystaniem indywidualnego stanu instancji

Wykorzystywanie metody __getattr__ do sprawdzania poprawności
Wykorzystywanie metody __getattribute__ do sprawdzania poprawności

Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 39. Dekoratory

Czym jest dekorator

Zarządzanie wywołaniami oraz instancjami
Zarządzanie funkcjami oraz klasami
Wykorzystywanie i definiowanie dekoratorów
Do czego służą dekoratory

Podstawy

Dekoratory funkcji

Zastosowanie
Implementacja
Obsługa dekoracji metod

Dekoratory klas

Zastosowanie
Implementacja
Obsługa większej liczby instancji

Zagnieżdżanie dekoratorów
Argumenty dekoratorów
Dekoratory zarządzają także funkcjami oraz klasami

Kod dekoratorów funkcji

Śledzenie wywołań
Możliwości w zakresie zachowania informacji o stanie

Atrybuty instancji klasy
Zakresy zawierające oraz zmienne globalne
Zakresy funkcji zawierających oraz zmienne nielokalne
Atrybuty funkcji

Uwagi na temat klas I dekorowanie metod klas

Wykorzystywanie zagnieżdżonych funkcji do dekoracji metod
Wykorzystywanie deskryptorów do dekorowania metod

Mierzenie czasu wywołania

Dekoratory a pomiar czasu wywołania
Niuanse pomiaru czasu

Dodawanie argumentów dekoratora
Pomiar czasu z użyciem argumentów dekoratora
Kod dekoratorów klas
Klasy singletona
Alternatywne rozwiązania
Śledzenie interfejsów obiektów

Śledzenie interfejsów za pomocą dekoratorów klas
Stosowanie dekoratorów klas z wbudowanymi typami

Uwagi na temat klas II zachowanie większej liczby instancji
Dekoratory a funkcje zarządzające
Do czego służą dekoratory (raz jeszcze)

Bezpośrednie zarządzanie funkcjami oraz klasami
Przykład atrybuty prywatne i publiczne

Implementacja atrybutów prywatnych
Szczegóły implementacji I

Dziedziczenie a delegacja
Argumenty dekoratora
Zachowywanie stanu i zakresy funkcji zawierającej
Wykorzystanie __dict__ oraz __slots__ (i innych nazw wirtualnych)

Uogólnienie kodu pod kątem deklaracji atrybutów jako publicznych
Szczegóły implementacji II

Użycie nazw pseudoprywatnych __X
Złamanie prywatności
Kompromisy związane z dekoratorem

Znane problemy

Ograniczenie: delegacja metod przeciążania operatorów kończy się niepowodzeniem w Pythonie 3.x
Sposoby redefiniowania metod przeciążających operatory w wersji 3.x

Definicja śródwierszowa
Nadrzędne klasy mieszane
Warianty kodowania: routery, deskryptory, automatyzacja

Czy metody operatorów należy weryfikować?
Alternatywy implementacyjne: wstawianie __getattribute__, inspekcja stosu wywołań

W Pythonie nie chodzi o kontrolę

Przykład sprawdzanie poprawności argumentów funkcji

Cel
Prosty dekorator sprawdzający przedziały dla argumentów pozycyjnych
Uogólnienie kodu pod kątem słów kluczowych i wartości domyślnych
Szczegóły implementacji

Dalsza introspekcja
Założenia dotyczące argumentów
Algorytm dopasowywania

Znane problemy

Niepoprawne wywołania
Dowolne argumenty
Zagnieżdżone dekoratory

Argumenty dekoratora a adnotacje funkcji
Inne zastosowania sprawdzanie typów (skoro nalegamy!)

Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 40. Metaklasy

Tworzyć metaklasy czy tego nie robić?

Zwiększające się poziomy magii
Język pełen haczyków
Wady funkcji pomocniczych
Metaklasy a dekoratory klas runda 1.

Model metaklasy

Klasy są instancjami obiektu type
Metaklasy są klasami podrzędnymi klasy type
Protokół instrukcji class

Deklarowanie metaklas

Deklarowanie w wersji 3.x
Deklarowanie w wersji 2.x
Kierowanie metaklas w wersjach 3.x i 2.x

Tworzenie metaklas

Prosta metaklasa
Dostosowywanie tworzenia do własnych potrzeb oraz inicjalizacja
Pozostałe sposoby tworzenia metaklas

Użycie prostych funkcji fabrycznych
Przeciążenie wywołań tworzących klasę za pomocą zwykłych klas
Przeciążenie wywołań tworzących klasę za pomocą metaklas

Instancje a dziedziczenie

Metaklasa a klasa nadrzędna
Dziedziczenie: pełna historia

Algorytm dziedziczenia w Pythonie: wersja prosta
Specjalny przypadek deskryptorów
Algorytm dziedziczenia w Pythonie: wersja nieco pełniejsza
Dziedziczenie przypisań atrybutów
Specjalny przypadek wbudowanych operacji

Metody metaklas

Metody metaklasy a metody klasy
Przeciążanie operatorów w metodach metaklasy

Przykład dodawanie metod do klas

Ręczne rozszerzanie
Rozszerzanie oparte na metaklasie
Metaklasy a dekoratory klas runda 2.

Rozszerzenie oparte na dekoratorach
Zarządzanie instancjami zamiast klasami
Metaklasa równoważna dekoratorowi klasy?

Przykład zastosowanie dekoratorów do metod

Ręczne śledzenie za pomocą dekoracji
Śledzenie za pomocą metaklas oraz dekoratorów
Zastosowanie dowolnego dekoratora do metod
Metaklasy a dekoratory klas runda 3. (i ostatnia)

Podsumowanie rozdziału
Sprawdź swoją wiedzę quiz
Sprawdź swoją wiedzę odpowiedzi

Rozdział 41. Wszystko, co najlepsze

Paradoks Pythona

Opcjonalne cechy języka
Przeciwko niepokojącym usprawnieniom
Złożoność a siła
Prostota a elitarność
Końcowe wnioski

Dokąd dalej?
Na bis: wydrukuj swój certyfikat!

Dodatki
Dodatek A Instalacja i konfiguracja

Instalowanie interpretera Pythona

Czy Python jest już zainstalowany?
Skąd pobrać Pythona
Instalacja Pythona

Konfiguracja Pythona

Zmienne środowiskowe Pythona
Jak ustawić opcje konfiguracyjne?

Zmienne powłoki systemu Unix i Linux
Zmienne DOS (system Windows)
Graficzny interfejs użytkownika zmiennych środowiskowych Windows
Rejestr systemu Windows
Pliki ścieżek

Opcje wiersza poleceń Pythona

Uruchamianie skryptów z argumentami
Uruchamianie kodu podanego w argumentach i pobranego ze standardowego wejścia
Uruchamianie modułów umieszczonych w ścieżce wyszukiwania
Tryby zoptymalizowany i niebuforowany
Tryb interaktywny po wykonaniu skryptu
Argumenty wiersza poleceń w Pythonie w.x

Uruchamianie Pythona 3.3 za pomocą wiersza poleceń Windows
Uzyskanie pomocy
Dodatek B Uruchamianie Pythona 3.x w systemie Windows

Dziedzictwo systemu Unix
Dziedzictwo systemu Windows
Wprowadzenie nowego programu uruchomieniowego w systemie Windows
Podręcznik do programu uruchomieniowego

Krok 1: dyrektywa wersji w pliku
Krok 2: parametry w wierszu poleceń
Krok 3: stosowanie i zmienianie ustawień domyślnych

Pułapki nowego programu uruchomieniowego

Pułapka 1: nierozpoznany w Uniksie wiersz #! uniemożliwia uruchomienie skryptu

Wpływ zmian na przykłady użyte w książce i korekta

Pułapka 2: domyślna wersja 2.x w programie uruchomieniowym
Wpływ zmian na przykłady w książce i korekta
Pułapka 3: nowa opcja modyfikacji zmiennej PATH
Podsumowanie: ostateczny wynik dla systemu Windows

Dodatek C Zmiany w języku Python a niniejsza książka

Najważniejsze różnice między wersjami 2.x i 3.x

Zmiany w wersji 3.x
Rozszerzenia dostępne tylko w wersji 3.x

Ogólne uwagi do zmian w wersji 3.x

Zmiany w bibliotekach i narzędziach

Zmiany w standardowej bibliotece
Zmiany w narzędziach

Migracja do wersji 3.x

Zmiany opisane w piątym wydaniu: wersje 2.7, 3.2 i 3.3

Zmiany w wersji 2.7
Zmiany w wersji 3.3
Zmiany w wersji 3.2

Zmiany opisane w czwartym wydaniu: wersje 2.6, 3.0 i 3.1

Zmiany w wersji 3.1
Zmiany w wersjach 3.0 i 2.6
Niektóre elementy języka usunięte w Pythonie 3.0

Zmiany opisane w trzecim wydaniu: wersje 2.3, 2.4 i 2.5
Wcześniejsze i późniejsze zmiany w Pythonie

Dodatek D Rozwiązania ćwiczeń podsumowujących poszczególne części książki

Część I Wprowadzenie
Część II Typy i operacje
Część III Instrukcja i składnia
Część IV Funkcje i generatory
Część V Moduły i pakiety
Część VI Klasy i programowanie zorientowane obiektowo
Część VII Wyjątki oraz narzędzia

O autorze
Kolofon

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 ? Mark Lutz
Wybrane wydawnictwa ? Helion

Produkty rekomendowane

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ą.

/
0%
akcja
/
0%
fabuła
/
0%
jakość wydania
Liczba głosów: 0 Liczba opinii: 0

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

Python. Wprowadzenie. Wydanie V (ebook) - Pozostałe oferty

Historia cen - trend cenowy

Aktualnie najniższa cena: 109,45

Często kupowane razem

Produkty rekomendowane