"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