Czysty kod w Pythonie - ebook
Czysty kod w Pythonie - ebook
W porównaniu z innymi językami programowania Python wyróżnia się prostotą i zaskakującymi możliwościami. Używa się go do analizy danych, budowania sztucznej inteligencji, tworzenia stron WWW, jak również w badaniach naukowych. Właściwości tego języka sprawiają, że kod trzeba pisać uważnie, szczególnie w dużych projektach. Tymczasem trudno jest znaleźć odpowiednio dobre źródło informacji o sposobach tworzenia kodu wysokiej jakości. Publikacje dotyczące dobrych praktyk kodowania w Pythonie są nieliczne, a ich jakość nieraz pozostawia wiele do życzenia. Dodatkowy problem wynika z wszechstronności Pythona: jest wykorzystywany w wielu dziedzinach i trudno wskazać wspólne dla nich wzorce programistyczne.
Ta książka jest znakomitym przewodnikiem, dzięki któremu zaczniesz tworzyć wydajne i bezbłędne aplikacje w Pythonie. Zaczniesz od formatowania i dokumentowania kodu, umiejętnego stosowania wbudowanych struktur, stosowania modułów i metaklas. W ten sposób nauczysz się pisać uporządkowany kod. Potem poznasz nowe funkcjonalności języka Python i dowiesz się, jak efektywnie z nich korzystać. Następnie dowiesz się, jak wykorzystywać zaawansowane cechy języka, takie jak programowanie asynchroniczne, określanie typów danych i obsługa ścieżek, a także jak diagnozować kod, wykonywać testy jednostkowe i integracyjne oraz przygotowywać kod do uruchomienia w środowisku produkcyjnym. Na końcu poznasz najważniejsze narzędzia przeznaczone do szybkiego tworzenia kodu, zarządzania jego wersjami i weryfikowania poprawności.
W tej książce między innymi:
- właściwe wykorzystywanie wyrażeń i instrukcji
- tworzenie własnych słowników
- zaawansowane struktury danych
- pisanie najlepszych modułów, klas i funkcji
- asynchroniczne wywoływanie funkcji
Python: kodowanie jest sztuką!
Spis treści
O autorze 7
O korektorze merytorycznym 8
Podziękowania 9
Wprowadzenie 11
Rozdział 1. Kodowanie pythoniczne 13
- Tworzenie pythonicznego kodu 13
- Nazewnictwo 14
- Wyrażenia i instrukcje 16
- Pythoniczny styl kodowania 19
- Komentarze dokumentacyjne 24
- Komentarze dokumentacyjne do modułów 26
- Komentarze dokumentacyjne do klas 26
- Komentarze dokumentacyjne do funkcji 27
- Przydatne narzędzia dokumentacyjne 28
- Pythoniczne struktury sterujące 28
- Wyrażenia listowe 28
- Nie twórz skomplikowanych wyrażeń listowych 29
- Kiedy stosować wyrażenia lambda? 31
- Kiedy stosować generatory, a kiedy wyrażenia listowe? 31
- Dlaczego nie należy stosować instrukcji else w pętlach? 32
- Dlaczego warto stosować funkcję range() w języku Python 3? 34
- Zgłaszanie wyjątków 35
- Często zgłaszane wyjątki 36
- Obsługuj wyjątki za pomocą instrukcji finally 37
- Twórz własne klasy wyjątków 37
- Obsługuj konkretne wyjątki 39
- Zwracaj uwagę na zewnętrzne wyjątki 40
- Twórz jak najmniejsze bloki try 41
- Podsumowanie 42
Rozdział 2. Struktury danych 43
- Popularne struktury danych 43
- Zbiory i wydajny kod 43
- Przetwarzanie danych za pomocą struktury namedtuple 45
- Typ str i znaki diakrytyczne 47
- Zamiast list stosuj iteratory 48
- Przetwarzaj listy za pomocą funkcji zip() 50
- Wykorzystuj zalety wbudowanych funkcji 51
- Zalety słownika 53
- Kiedy używać słownika zamiast innych struktur? 53
- Kolekcje 53
- Słowniki uporządkowany, domyślny i zwykły 56
- Słownik jako odpowiednik instrukcji switch 57
- Scalanie słowników 58
- Czytelne wyświetlanie zawartości słownika 59
- Podsumowanie 60
Rozdział 3. Jak pisać lepsze funkcje i klasy? 61
- Funkcje 61
- Twórz małe funkcje 61
- Twórz generatory 63
- Używaj wyjątku zamiast wyniku None 64
- Stosuj w argumentach klucze i wartości domyślne 65
- Nie twórz funkcji jawnie zwracających wynik None 66
- Krytycznie podchodź do tworzonych funkcji 68
- Stosuj w wyrażeniach funkcje lambda 70
- Klasy 71
- Jak duża powinna być klasa? 71
- Struktura klasy 72
- Właściwe użycie dekoratora @property 74
- Kiedy należy stosować metody statyczne? 75
- Dziedziczenie klas abstrakcyjnych 76
- Odwołania do stanu klasy przy użyciu dekoratora @classmethod 77
- Atrybuty publiczne zamiast prywatnych 78
- Podsumowanie 79
Rozdział 4. Praca z modułami i metaklasami 81
- Moduły i metaklasy 81
- Porządkowanie kodu za pomocą modułów 82
- Zalety pliku __init__.py 84
- Importowanie funkcji i klas z modułów 86
- Blokowanie importu całego modułu za pomocą metaklasy __all__ 87
- Kiedy stosować metaklasy? 88
- Weryfikowanie podklas za pomocą metody __new__() 89
- Dlaczego atrybut __slots__ jest tak przydatny? 91
- Modyfikowanie funkcjonowania klasy za pomocą metaklasy 93
- Deskryptory w języku Python 94
- Podsumowanie 96
Rozdział 5. Dekoratory i menedżery kontekstu 97
- Dekoratory 97
- Czym są dekoratory i dlaczego są tak przydatne? 98
- Korzystanie z dekoratorów 99
- Modyfikowanie działania funkcji za pomocą dekoratorów 101
- Stosowanie kilku dekoratorów jednocześnie 102
- Dekorowanie funkcji z argumentami 103
- Używaj dekoratorów z biblioteki 104
- Dekoratory obsługujące stan klasy i weryfikujące poprawność danych 106
- Menedżery kontekstu 108
- Zalety menedżerów kontekstu 108
- Tworzenie menedżera kontekstu od podstaw 109
- Tworzenie menedżera kontekstu za pomocą biblioteki contextlib 111
- Praktyczne przykłady użycia menedżera kontekstu 111
- Podsumowanie 114
Rozdział 6. Generatory i iteratory 115
- Zalety generatorów i iteratorów 115
- Iteratory 115
- Generatory 117
- Kiedy stosować iteratory? 118
- Moduł itertools 119
- Dlaczego generatory są tak przydatne? 121
- Wyrażenia listowe i iteratory 122
- Zalety instrukcji yield 122
- Instrukcja yield from 123
- Instrukcja yield jest szybka 123
- Podsumowanie 124
Rozdział 7. Nowe funkcjonalności języka Python 125
- Programowanie asynchroniczne 125
- Wprowadzenie do programowania asynchronicznego 126
- Jak to działa? 128
- Obiekty oczekiwalne 133
- Biblioteki do tworzenia kodu asynchronicznego 139
- Python i typy danych 143
- Typy danych w Pythonie 143
- Moduł typing 144
- Czy typy danych spowalniają kod? 145
- Jak dzięki modułowi typing można pisać lepszy kod? 146
- Metoda super() 147
- Lepsza obsługa ścieżek dzięki bibliotece pathlib 147
- print() jest teraz funkcją 147
- f-ciągi 147
- Obowiązkowe argumenty pozycyjne 148
- Kontrolowana kolejność elementów w słownikach 148
- Iteracyjne rozpakowywanie struktur 149
- Podsumowanie 149
Rozdział 8. Diagnostyka i testy kodu 151
- Diagnostyka 151
- Narzędzia diagnostyczne 152
- Funkcja breakpoint() 155
- Moduł logging zamiast funkcji print() 155
- Identyfikowanie słabych punktów kodu za pomocą metryk 159
- Do czego przydaje się środowisko IPython? 159
- Testy 161
- Dlaczego testowanie kodu jest ważne? 161
- Biblioteki pytest i unittest 161
- Testowanie oparte na właściwościach 164
- Tworzenie raportów z testów 165
- Automatyzacja testów jednostkowych 166
- Przygotowanie kodu do uruchomienia w środowisku produkcyjnym 166
- Sprawdzanie pokrycia kodu testami 167
- Program virtualenv 168
- Podsumowanie 169
Dodatek. Niezwykłe narzędzia dla języka Python 171
- Sphinx 171
- Coverage.py 172
- pre-commit 173
- Pyenv 173
- Jupyter Lab 174
- Pycharm/VSCode/Sublime 174
- Flake8 i Pylint 175
Kategoria: | Programowanie |
Zabezpieczenie: |
Watermark
|
ISBN: | 978-83-283-6463-9 |
Rozmiar pliku: | 1,8 MB |