POLECAMY
Autor:
Wydawca:
Format:
epub, mobi, ibuk
Rozwijaj swoje umiejętności programowania w Pythonie, zagłębiając się w tajniki języka przy pomocy książki Python na poważnie. Napisana z myślą o developerach i doświadczonych programistach książka Python na poważnie bazuje na ponad 15-letnim doświadczeniu w pracy z Pythonem, uczy czytelników, jak unikać typowych błędów, jak pisać kod w bardziej produktywny sposób i jak szybciej budować lepsze programy. Omówimy szereg zaawansowanych zagadnień, takich jak wielowątkowość i memoizacja, przedstawimy porady ekspertów m.in. w zakresie projektowania interfejsów API i obsługi baz danych, a także wytłumaczymy pewne wewnętrzne mechanizmy, aby pomóc w lepszym zrozumieniu języka Python.
Na początku dowiesz się, jak rozpocząć projekt i rozwiązać takie kwestie jak numerowanie wersji i automatyczne sprawdzanie kodu. Później zobaczysz, jak efektywnie definiować funkcje, wybierać odpowiednie struktury danych i biblioteki, budować przyszłościowe programy, przygotowywać oprogramowanie do dystrybucji oraz optymalizować swoje programy, także na poziomie kodu bajtowego.
Ponadto dowiesz się jak:
Tworzyć i wykorzystywać efektywne dekoratory i metody, z uwzględnieniem metod abstrakcyjnych, statycznych i klas Używać Pythona do programowania funkcyjnego przy pomocy generatorów oraz funkcji czystych i funkcyjnych Rozszerzać narzędzie flake8 o analizę drzewa składniowego AST, wprowadzając bardziej zaawansowaną technikę automatycznego sprawdzania kodu Przeprowadzać dynamiczną analizę wydajności w celu wykrywania słabych punktów w kodzie Korzystać z relacyjnych baz danych, a także efektywnie zarządzać danymi i przesyłać je strumieniowo przy użyciu PostgreSQL Wznieś swoje umiejętności na wyższy poziom. Ucz się od ekspertów i zostań poważnym programistą Pythona dzięki książce Python na poważnie!
Rok wydania | 2019 |
---|---|
Liczba stron | 238 |
Kategoria | Programowanie |
Wydawca | Wydawnictwo Naukowe PWN |
Tłumaczenie | Natalia Chounlamany-Turalska |
ISBN-13 | 978-83-01-20641-3 |
Numer wydania | 1 |
Język publikacji | polski |
Informacja o sprzedawcy | ePWN sp. z o.o. |
POLECAMY
Ciekawe propozycje
Spis treści
PODZIĘKOWANIA XV | |
WPROWADZENIE XVII | |
Kto i dlaczego powinien przeczytać tę książkę XVIII | |
O tej książce XVIII | |
1. ROZPOCZYNANIE PROJEKTU | 1 |
Wersje Pythona | 1 |
Układ projektu | 3 |
Co robić | 3 |
Czego nie robić | 4 |
Numerowanie wersji | 5 |
Style programowania i automatyczne sprawdzanie | 6 |
Narzędzia do wykrywania błędów stylu | 8 |
Narzędzia do wykrywania błędów programistycznych | 8 |
Joshua Harlow o Pythonie | 10 |
2. MODUŁY, BIBLIOTEKI I PLATFORMY M | 13 |
System importowania | 14 |
Moduł sys | 16 |
Ścieżki importowania | 16 |
Niestandardowe importery | 17 |
Obiekty wyszukujące z listy sys.meta_path | 17 |
Przydatne standardowe biblioteki | 19 |
Zewnętrzne biblioteki | 21 |
Lista wymagań, jakie powinna spełniać bezpieczna biblioteka zewnętrzna | 22 |
Chronienie kodu przy użyciu opakowania API | 23 |
Instalacja pakietu: dodatkowe możliwości narzędzia pip | 23 |
Stosowanie i wybieranie platform | 26 |
Doug Hellmann, Python Core Developer, o bibliotekach Pythona | 27 |
3. DOKUMENTACJA I NAJLEPSZE PRAKTYKI | 33 |
Dokumentowanie przy użyciu Sphinksa | 34 |
Rozpoczęcie pracy ze Sphinksem i reST | 35 |
Moduły Sphinksa | 36 |
Pisanie rozszerzeń Sphinksa | 39 |
Zarządzanie zmianami interfejsów API | 41 |
Numerowanie wersji API | 41 |
Dokumentowanie zmian API | 42 |
Oznaczanie przestarzałych funkcji przy użyciu modułu warnings | 44 |
Podsumowanie | 46 |
Christophe de Vienne o rozwijaniu interfejsów API | 46 |
4. OBSŁUGA ZNACZNIKÓW CZASU I STREF CZASOWYCH | 49 |
Problem brakujących stref czasowych | 50 |
Budowanie domyślnych obiektów datetime | 50 |
Rozpoznawanie stref czasowych przy użyciu dateutil | 52 |
Serializowanie obiektów datetime rozpoznających strefę czasową | 54 |
Rozwiązywanie problemu niejednoznacznych godzin | 56 |
Podsumowanie | 57 |
5. DYSTRYBUCJA OPROGRAMOWANIA | 59 |
Krótka historia plików setup.py | 60 |
Zarządzanie pakietami przy użyciu setup.cfg | 62 |
Standardowy format dystrybucji wheel | 64 |
Dzielenie się swoją pracą ze światem | 66 |
Punkty wejścia | 70 |
Wizualizowanie punktów wejścia | 71 |
Wykorzystywanie skryptów konsoli | 72 |
Wykorzystywanie wtyczek i sterowników | 74 |
Podsumowanie | 77 |
Nick Coghlan o zarządzaniu pakietami | 77 |
6. TESTY JEDNOSTKOWE | 79 |
Podstawy testowania | 80 |
Proste testy | 80 |
Pomijanie testów | 82 |
Uruchamianie wybranych testów | 83 |
Równoległe uruchamianie testów | 85 |
Tworzenie obiektów wykorzystywanych w testach przy użyciu fikstur | 86 |
Uruchamianie scenariuszy testowych | 87 |
Kontrolowane testy bazujące na atrapach obiektów | 88 |
Odkrywanie nieprzetestowanego kodu przy użyciu coverage | 93 |
Środowiska wirtualne | 95 |
Konfigurowanie środowiska wirtualnego | 96 |
Stosowanie virtualenv wraz z narzędziem tox | 98 |
Odtwarzanie środowiska | 99 |
Stosowanie różnych wersji Pythona | 100 |
Integrowanie innych testów | 101 |
Zasady dotyczące testowania | 102 |
Robert Collins o testowaniu | 103 |
7. METODY I DEKORATORY | 107 |
Dekoratory i kiedy ich używać | 108 |
Tworzenie dekoratorów | 108 |
Pisanie dekoratorów | 109 |
Stosowanie wielu dekoratorów | 110 |
Pisanie dekoratorów klas | 111 |
W jaki sposób działają metody w Pythonie | 116 |
Metody statyczne | 117 |
Metody klasy | 119 |
Metody abstrakcyjne | 120 |
Mieszanie metod statycznych, klasy i abstrakcyjnych | 121 |
Umieszczanie implementacji w metodach abstrakcyjnych | 123 |
Prawda o metodzie super | 124 |
Podsumowanie | 127 |
8. PROGRAMOWANIE FUNKCYJNE | 129 |
Tworzenie czystych funkcji | 130 |
Generatory | 131 |
Tworzenie generatora | 131 |
Zwracanie i przekazywanie wartości przy użyciu instrukcji yield | 133 |
Inspekcje generatorów | 134 |
Wyrażenia listowe | 136 |
Funkcjonowanie funkcji funkcyjnych | 137 |
Stosowanie funkcji na elementach przy użyciu funkcji map() | 137 |
Filtrowanie list przy użyciu funkcji filter() | 138 |
Pobieranie indeksów przy użyciu funkcji enumerate() | 138 |
Sortowanie listy przy użyciu funkcji sorted() | 138 |
Wyszukiwanie przy użyciu any() i all() elementów spełniających warunki | 139 |
Łączenie list przy użyciu funkcji zip() | 139 |
Rozwiązania typowych problemów | 140 |
Przydatne funkcje itertools | 140 |
Podsumowanie | 145 |
9. DRZEWO AST, HY I ATRYBUTY JAK W JĘZYKU LISP | 147 |
Analizowanie drzewa AST | 148 |
Pisanie programu przy użyciu AST | 150 |
Obiekty AST | 151 |
Przechodzenie drzewa AST | 151 |
Rozszerzanie narzędzia fl ake8 o analizy AST | 153 |
Pisanie klasy | 154 |
Pomijanie nieistotnego kodu | 154 |
Sprawdzanie, czy istnieje odpowiedni dekorator | 155 |
Poszukiwanie argumentu self | 156 |
Szybkie wprowadzenie do Hy | 158 |
Podsumowanie | 160 |
Paul Tagliamonte o AST i Hy | 160 |
10. WYDAJNOŚĆ I OPTYMALIZACJE | 165 |
Struktury danych | 166 |
Zrozumienie działania programu przez profi lowanie | 168 |
cProfi le | 169 |
Dezasemblowanie przy użyciu modułu dis | 171 |
Efektywne defi niowanie funkcji | 173 |
Listy uporządkowane i bisect | 174 |
namedtuple i __slots__ | 177 |
Memoizacja | 182 |
Szybszy Python dzięki PyPy | 184 |
Eliminacja kopiowania przy użyciu protokołu bufora | 185 |
Podsumowanie | 190 |
Victor Stinner o optymalizacji | 190 |
11. SKALOWALNOŚĆ I ARCHITEKTURA 193 | |
Wielowątkowość w Pythonie i jej ograniczenia | 194 |
Przetwarzanie wieloprocesowe kontra wielowątkowe | 195 |
Architektura sterowana zdarzeniami | 197 |
Inne opcje i asyncio | 199 |
Architektura zorientowana na usługi | 200 |
Komunikacja między procesami przy użyciu ZeroMQ | 201 |
Podsumowanie | 203 |
12. ZARZĄDZANIE RELACYJNYMI BAZAMI DANYCH | 205 |
Rozwiązania RDBMS, ORM i kiedy ich używać | 205 |
Wewnętrzne bazy danych | 208 |
Strumieniowe przesyłanie danych przy użyciu Flask i PostgreSQL | 209 |
Pisanie aplikacji do strumieniowego przesyłania danych | 209 |
Budowanie aplikacji | 212 |
Dimitri Fontaine on Databases | 214 |
13. PISZ MNIEJ, PROGRAMUJ WIĘCEJ | 219 |
Użycie modułu six do wspierania wersji Python 2 i 3 | 219 |
Ciągi a unicode | 221 |
Rozwiązywanie problemu przeniesienia modułów Pythona | 221 |
Moduł modernize | 222 |
Wykorzystywanie Pythona jak języka Lisp do tworzenia jednego dyspozytora | 222 |
Tworzenie metod generycznych w języku Lisp | 222 |
Metody generyczne w Pythonie | 224 |
Menedżery kontekstu | 226 |
Redukowanie szablonowego kodu przy użyciu attr | 229 |
Podsumowanie | 232 |
INDEKS | 233 |