"Python na poważnie"
Identyfikator Librowy: 206954
Spis treści
PODZIĘKOWANIA 16
WPROWADZENIE 18
Kto i dlaczego powinien przeczytać tę książkę 19
O tej książce 19
1. ROZPOCZYNANIE PROJEKTU 22
Wersje Pythona 22
Układ projektu 24
Co robić 24
Czego nie robić 25
Numerowanie wersji 26
Style programowania i automatyczne sprawdzanie 27
Narzędzia do wykrywania błędów programistycznych 29
Narzędzia do wykrywania błędów stylu 29
Joshua Harlow o Pythonie 31
2. MODUŁY, BIBLIOTEKI I PLATFORMY M 34
System importowania 35
Ścieżki importowania 37
Moduł sys 37
Niestandardowe importery 38
Obiekty wyszukujące z listy sys.meta_path 38
Przydatne standardowe biblioteki 40
Zewnętrzne biblioteki 42
Lista wymagań, jakie powinna spełniać bezpieczna biblioteka zewnętrzna 43
Instalacja pakietu: dodatkowe możliwości narzędzia pip 44
Chronienie kodu przy użyciu opakowania API 44
Stosowanie i wybieranie platform 47
Doug Hellmann, Python Core Developer, o bibliotekach Pythona 48
3. DOKUMENTACJA I NAJLEPSZE PRAKTYKI 54
Dokumentowanie przy użyciu Sphinksa 55
Rozpoczęcie pracy ze Sphinksem i reST 56
Moduły Sphinksa 57
Pisanie rozszerzeń Sphinksa 60
Numerowanie wersji API 62
Zarządzanie zmianami interfejsów API 62
Dokumentowanie zmian API 63
Oznaczanie przestarzałych funkcji przy użyciu modułu warnings 65
Christophe de Vienne o rozwijaniu interfejsów API 67
Podsumowanie 67
4. OBSŁUGA ZNACZNIKÓW CZASU I STREF CZASOWYCH 70
Budowanie domyślnych obiektów datetime 71
Problem brakujących stref czasowych 71
Rozpoznawanie stref czasowych przy użyciu dateutil 73
Serializowanie obiektów datetime rozpoznających strefę czasową 75
Rozwiązywanie problemu niejednoznacznych godzin 77
Podsumowanie 78
5. DYSTRYBUCJA OPROGRAMOWANIA 80
Krótka historia plików setup.py 81
Zarządzanie pakietami przy użyciu setup.cfg 83
Standardowy format dystrybucji wheel 85
Dzielenie się swoją pracą ze światem 87
Punkty wejścia 91
Wizualizowanie punktów wejścia 92
Wykorzystywanie skryptów konsoli 93
Wykorzystywanie wtyczek i sterowników 95
Nick Coghlan o zarządzaniu pakietami 98
Podsumowanie 98
6. TESTY JEDNOSTKOWE 100
Podstawy testowania 101
Proste testy 101
Pomijanie testów 103
Uruchamianie wybranych testów 104
Równoległe uruchamianie testów 106
Tworzenie obiektów wykorzystywanych w testach przy użyciu fikstur 107
Uruchamianie scenariuszy testowych 108
Kontrolowane testy bazujące na atrapach obiektów 109
Odkrywanie nieprzetestowanego kodu przy użyciu coverage 114
Środowiska wirtualne 116
Konfigurowanie środowiska wirtualnego 117
Stosowanie virtualenv wraz z narzędziem tox 119
Odtwarzanie środowiska 120
Stosowanie różnych wersji Pythona 121
Integrowanie innych testów 122
Zasady dotyczące testowania 123
Robert Collins o testowaniu 124
7. METODY I DEKORATORY 128
Dekoratory i kiedy ich używać 129
Tworzenie dekoratorów 129
Pisanie dekoratorów 130
Stosowanie wielu dekoratorów 131
Pisanie dekoratorów klas 132
W jaki sposób działają metody w Pythonie 137
Metody statyczne 138
Metody klasy 140
Metody abstrakcyjne 141
Mieszanie metod statycznych, klasy i abstrakcyjnych 142
Umieszczanie implementacji w metodach abstrakcyjnych 144
Prawda o metodzie super 145
Podsumowanie 148
8. PROGRAMOWANIE FUNKCYJNE 150
Tworzenie czystych funkcji 151
Generatory 152
Tworzenie generatora 152
Zwracanie i przekazywanie wartości przy użyciu instrukcji yield 154
Inspekcje generatorów 155
Wyrażenia listowe 157
Funkcjonowanie funkcji funkcyjnych 158
Stosowanie funkcji na elementach przy użyciu funkcji map() 158
Filtrowanie list przy użyciu funkcji filter() 159
Pobieranie indeksów przy użyciu funkcji enumerate() 159
Sortowanie listy przy użyciu funkcji sorted() 159
Łączenie list przy użyciu funkcji zip() 160
Wyszukiwanie przy użyciu any() i all() elementów spełniających warunki 160
Przydatne funkcje itertools 161
Rozwiązania typowych problemów 161
Podsumowanie 166
9. DRZEWO AST, HY I ATRYBUTY JAK W JĘZYKU LISP 168
Analizowanie drzewa AST 169
Pisanie programu przy użyciu AST 171
Obiekty AST 172
Przechodzenie drzewa AST 172
Rozszerzanie narzędzia fl ake8 o analizy AST 174
Pisanie klasy 175
Pomijanie nieistotnego kodu 175
Sprawdzanie, czy istnieje odpowiedni dekorator 176
Poszukiwanie argumentu self 177
Szybkie wprowadzenie do Hy 179
Paul Tagliamonte o AST i Hy 181
Podsumowanie 181
10. WYDAJNOŚĆ I OPTYMALIZACJE 186
Struktury danych 187
Zrozumienie działania programu przez profi lowanie 189
cProfi le 190
Dezasemblowanie przy użyciu modułu dis 192
Efektywne defi niowanie funkcji 194
Listy uporządkowane i bisect 195
namedtuple i __slots__ 198
Memoizacja 203
Szybszy Python dzięki PyPy 205
Eliminacja kopiowania przy użyciu protokołu bufora 206
Podsumowanie 211
Victor Stinner o optymalizacji 211
11. SKALOWALNOŚĆ I ARCHITEKTURA 214
Wielowątkowość w Pythonie i jej ograniczenia 215
Przetwarzanie wieloprocesowe kontra wielowątkowe 216
Architektura sterowana zdarzeniami 218
Inne opcje i asyncio 220
Architektura zorientowana na usługi 221
Komunikacja między procesami przy użyciu ZeroMQ 222
Podsumowanie 224
12. ZARZĄDZANIE RELACYJNYMI BAZAMI DANYCH 226
Rozwiązania RDBMS, ORM i kiedy ich używać 226
Wewnętrzne bazy danych 229
Strumieniowe przesyłanie danych przy użyciu Flask i PostgreSQL 230
Pisanie aplikacji do strumieniowego przesyłania danych 230
Budowanie aplikacji 233
Dimitri Fontaine on Databases 235
13. PISZ MNIEJ, PROGRAMUJ WIĘCEJ 240
Użycie modułu six do wspierania wersji Python 2 i 3 240
Ciągi a unicode 242
Rozwiązywanie problemu przeniesienia modułów Pythona 242
Wykorzystywanie Pythona jak języka Lisp do tworzenia jednego dyspozytora 243
Moduł modernize 243
Tworzenie metod generycznych w języku Lisp 243
Metody generyczne w Pythonie 245
Menedżery kontekstu 247
Redukowanie szablonowego kodu przy użyciu attr 250
Podsumowanie 253
INDEKS 254