Dbamy o Twoją prywatność
Dzięki plikom cookies i technologiom pokrewnym oraz przetwarzaniu Twoich danych, możemy zapewnić, że dopasujemy do Ciebie wyświetlane treści.Wyrażając zgodę na przechowywanie informacji na urządzeniu końcowym lub dostęp do nich i przetwarzanie danych (w tym w obszarze profilowania, analiz rynkowych i statystycznych) sprawiasz, że łatwiej będzie odnaleźć Ci w Allegro dokładnie to, czego szukasz i potrzebujesz.Administratorem Twoich danych będzie Allegro oraz niektórzy partnerzy, z którymi współpracujemy.
Ułatwienia korzystania z naszych stron, prezentowania spersonalizowanych treści i reklam oraz ich pomiaru, tworzenia statystyk, poprawy funkcjonalności strony.Zgodę wyrażasz dobrowolnie. Możesz ją w każdym momencie wycofać lub ponowić w zakładce Ustawienia plików cookies na stronie głównej. Wycofanie zgody nie wpływa na legalność uprzedniego przetwarzania.
polityka plików cookiespolityka ochrony prywatnościOpis
Czysty kod w Pythonie. Twórz wydajny i łatwy w utrzymaniu kod. Wydanie II
Mariano Anaya
Popularność Pythona, ulubionego języka programistów i naukowców, stale rośnie. Jest on bowiem łatwy do nauczenia się: nawet początkujący programista może napisać działający kod. W efekcie, mimo że Python pozwala na pisanie kodu przejrzystego i prostego w konserwacji, zdarzają się przypadki kodu źle zorganizowanego, nieczytelnego i praktycznie nietestowalnego. Jedną z przyczyn tego stanu rzeczy jest tendencja niektórych programistów do pisania kodu bez czytelnej struktury. Zidentyfikowanie takich problemów i ich rozwiązywanie nie jest łatwym zadaniem.
Dzięki tej książce nauczysz się korzystać z kilku narzędzi służących do zarządzania projektami napisanymi w Pythonie. Dowiesz się, czym się charakteryzuje czysty kod i jakie techniki umożliwiają tworzenie czytelnego i wydajnego kodu. Przekonasz się, że do tego celu wystarczą standardowa biblioteka Pythona i zestaw najlepszych praktyk programistycznych. Opisano tu szczegóły programowania obiektowego w Pythonie wraz z zastosowaniem deskryptorów i generatorów. Zaprezentowano również zasady testowania oprogramowania i sposoby rozwiązywania problemów poprzez implementację wzorców projektowych w kodzie. Pokazano też, jak można podzielić monolityczną aplikację na mikrousługi, by otrzymać solidną architekturę aplikacji.
W książce między innymi:
- konfiguracja wydajnego środowiska programistycznego
- tworzenie zaawansowanych projektów obiektowych
- techniki eliminacji zdublowanego kodu i tworzenie rozbudowanych abstrakcji
- zastosowanie dekoratorów i deskryptorów
- skuteczna refaktoryzacja kodu
- budowa solidnej architektury opartej na czystym kodzie Pythona
Czysty kod w Pythonie. Tylko taki warto pisać!
O autorze:
Mariano Anaya jest doświadczonym inżynierem oprogramowania. Tworzy oprogramowanie i wspiera innych programistów. Zajmuje się architekturą oprogramowania, programowaniem funkcyjnym i systemami rozproszonymi. Był prelegentem na konferencjach EuroPython w latach 2016 i 2017, a także FOSDEM w 2019 roku.
Spis treści książki
- O autorze
- O recenzencie
- Przedmowa
Dla kogo jest ta książka?
Co zawiera ta książka?
Jak najlepiej wykorzystać tę książkę?
Pobieranie plików z przykładowym kodem
Stosowane konwencje
- 1. Wprowadzenie, formatowanie kodu i narzędzia
Wprowadzenie
Znaczenie terminu czysty kod
Znaczenie posiadania czystego kodu
Kilka wyjątków
Formatowanie kodu
Przestrzeganie przewodnika stylu kodowania w projekcie
Dokumentacja
Komentarze do kodu
Docstringi
Adnotacje
Czy adnotacje zastępują docstringi?
Narzędzia
Sprawdzanie spójności typów
Ogólne sprawdzanie poprawności w kodzie
Formatowanie automatyczne
Konfiguracja automatycznych kontroli
Podsumowanie
Materiały referencyjne
- 2. Kod pythoniczny
Indeksy i wycinki
Tworzenie własnych sekwencji
Menedżery kontekstu
Implementacja menedżerów kontekstu
Wyrażenia składane i wyrażenia przypisania
Właściwości, atrybuty i różne typy metod obiektów
Znaki podkreślenia w Pythonie
Właściwości
Tworzenie klas o bardziej zwartej składni
Obiekty iterowalne
Tworzenie obiektów iterowalnych
Tworzenie sekwencji
Obiekty kontenerowe
Dynamiczne atrybuty obiektów
Obiekty wywoływalne
Podsumowanie metod magicznych
Haczyki Pythona
Mutowalne argumenty domyślne
Rozszerzanie typów wbudowanych
Krótkie wprowadzenie do kodu asynchronicznego
Podsumowanie
Materiały referencyjne
- 3. Ogólne cechy dobrego kodu
Projektowanie według kontraktu
Warunki wstępne
Warunki końcowe
Kontrakty pythoniczne
Projektowanie według kontraktu wnioski
Programowanie defensywne
Obsługa błędów
Podstawianie wartości
Obsługa wyjątków
Obsługa wyjątków na odpowiednim poziomie abstrakcji
Nie ujawniaj śladów stosu użytkownikom końcowym
Unikaj pustych bloków except
Dołącz oryginalny wyjątek
Używanie asercji w Pythonie
Podział obowiązków
Spójność i sprzężenie
Akronimy
DRY/OAOO
YAGNI
KIS
EAFP/LBYL
Dziedziczenie w Pythonie
Kiedy zastosowanie dziedziczenia jest dobrą decyzją?
Antywzorce dziedziczenia
Wielokrotne dziedziczenie w Pythonie
Kolejność rozwiązywania metod (MRO)
Domieszki
Argumenty funkcji i metod
Jak działają argumenty funkcji w Pythonie?
Jak argumenty są kopiowane do funkcji?
Zmienna liczba argumentów
Argumenty wyłącznie pozycyjne
Argumenty wyłącznie kluczowe
Liczba argumentów w funkcjach
Argumenty funkcji a sprzężenia
Sygnatury kompaktowych funkcji, które przyjmują zbyt wiele argumentów
Uwagi końcowe dotyczące dobrych praktyk projektowania oprogramowania
Ortogonalność w oprogramowaniu
Strukturyzacja kodu
Podsumowanie
Materiały referencyjne
- 4. Zasady SOLID
Zasada pojedynczej odpowiedzialności
Klasa mająca zbyt wiele obowiązków
Podział obowiązków
Zasada otwarty-zamknięty
Przykład zagrożeń dla utrzymania kodu w przypadku nieprzestrzegania zasady OCP
Refaktoryzacja systemu obsługi zdarzeń w celu uzyskania rozszerzalności
Rozbudowa systemu zdarzeń
Końcowe przemyślenia na temat OCP
Zasada podstawiania Liskov
Wykrywanie problemów dotyczących zasady LSP za pomocą narzędzi
Wykorzystanie narzędzia mypy do wykrywania nieprawidłowych sygnatur metod
Wykrywanie niezgodnych sygnatur za pomocą programu pylint
Bardziej subtelne przypadki naruszeń zasady LSP
Uwagi na temat LSP
Segregacja interfejsów
Interfejs, który dostarcza zbyt wiele
Im mniejszy interfejs, tym lepiej
Jak mały powinien być interfejs?
Odwracanie zależności
Przypadek sztywnych zależności
Odwracanie zależności
Wstrzykiwanie zależności
Podsumowanie
Bibliografia
- 5. Korzystanie z dekoratorów do usprawniania kodu
Czym są dekoratory w Pythonie?
Dekoratory funkcji
Dekoratory klas
Inne rodzaje dekoratorów
Bardziej zaawansowane dekoratory
Przekazywanie argumentów do dekoratorów
Dekoratory z zagnieżdżonymi funkcjami
Obiekty dekoratory
Dekoratory z wartościami domyślnymi
Dekoratory dla podprogramów
Rozszerzona składnia dekoratorów
Dobre zastosowania dla dekoratorów
Dostosowywanie sygnatur funkcji
Walidacja parametrów
Śledzenie kodu
Skuteczne dekoratory unikanie typowych błędów
Zachowywanie danych o oryginalnym opakowanym obiekcie
Obsługa skutków ubocznych w dekoratorach
Nieprawidłowa obsługa skutków ubocznych w dekoratorze
Dekoratory z pożądanymi skutkami ubocznymi
Tworzenie dekoratorów, które będą działać dla każdego rodzaju obiektów
Dekoratory a czysty kod
Kompozycja zamiast dziedziczenia
Zasada DRY z wykorzystaniem dekoratorów
Dekoratory a podział odpowiedzialności
Analiza dobrych dekoratorów
Podsumowanie
Bibliografia
- 6. Pełniejsze wykorzystywanie obiektów dzięki deskryptorom
Pierwsze spojrzenie na deskryptory
Oprzyrządowanie związane z deskryptorami
Opis metod protokołu deskryptora
Metoda get
Metoda set
Metoda delete
Metoda set name
Rodzaje deskryptorów
Deskryptory niezwiązane z danymi
Deskryptory danych
Deskryptory w praktyce
Zastosowanie deskryptorów
Pierwsza próba. Bez użycia deskryptorów
Implementacja idiomatyczna
Różne formy implementacji deskryptorów
Problem współdzielonego stanu
Dostęp do słownika obiektu
Korzystanie ze słabych referencji
Więcej uwag na temat deskryptorów
Wielokrotne wykorzystanie kodu
Alternatywa dla dekoratorów klas
Analiza deskryptorów
W jaki sposób Python wewnętrznie używa deskryptorów?
Funkcje i metody
Wbudowane dekoratory dla metod
Gniazda
Implementacja deskryptorów w dekoratorach
Uwagi końcowe na temat deskryptorów
Interfejs deskryptorów
Obiektowy projekt deskryptorów
Adnotacje typów dla deskryptorów
Podsumowanie
Bibliografia
- 7. Generatory, iteratory i programowanie asynchroniczne
Wymagania techniczne
Tworzenie generatorów
Pierwsze spojrzenie na generatory
Wyrażenia generatorowe
Idiomatyczne iteracje
Idiomy iteracji
Funkcja next()
Korzystanie z generatora
Itertools
Upraszczanie kodu za pomocą iteratorów
Powtarzające się iteracje
Pętle zagnieżdżone
Wzorzec Iterator w Pythonie
Interfejs iteracji
Obiekty sekwencji jako obiekty iterowalne
Podprogramy
Metody interfejsu generatora
close()
throw(typ_wyjątku[, wartość_wyjątku[, ślad_wyjątku]])
send(wartość)
Bardziej zaawansowane podprogramy
Zwracanie wartości w podprogramach
Delegowanie zadań do mniejszych podprogramów składnia yield from
Najprostsze wykorzystanie składni yield from
Przechwytywanie wartości zwracanej przez podgenerator
Wysyłanie danych do podgeneratora i odbieranie ich stamtąd
Programowanie asynchroniczne
Magiczne metody asynchroniczne
Asynchroniczne menedżery kontekstu
Inne metody magiczne
Iteracja asynchroniczna
Generatory asynchroniczne
Podsumowanie
Bibliografia
- 8. Testy jednostkowe i refaktoryzacja
Zasady projektowania a testy jednostkowe
Uwaga na temat innych form automatycznych testów
Testy jednostkowe a zwinne wytwarzanie oprogramowania
Testy jednostkowe a projektowanie oprogramowania
Definiowanie granic testowania
Narzędzia testowania
Frameworki i biblioteki do testów jednostkowych
unittest
Testy sparametryzowane
pytest
Proste przypadki testowe dla modułu pytest
Testy sparametryzowane
Fikstury
Pokrycie kodu testami
Konfigurowanie modułu do badania pokrycia kodu testami
Zastrzeżenia do pokrycia kodu testami
Obiekty mock
Ostrzeżenie przed łataniem i obiektami mock
Korzystanie z obiektów mock
Refaktoryzacja
Ewolucje kodu
Kod produkcyjny nie jest jedynym, który ewoluuje
Więcej o testowaniu
Testowanie oparte na właściwościach
Testowanie mutacji
Typowe motywy w testowaniu
Wartości graniczne
Klasy równoważności
Przypadki brzegowe
Krótkie wprowadzenie do techniki TDD
Podsumowanie
Bibliografia
- 9. Typowe wzorce projektowe
Zagadnienia dotyczące wzorców projektowych w Pythonie
Wzorce projektowe w praktyce
Wzorce kreacyjne
Fabryki
Singleton i Stan współdzielony (Monostat)
Stan współdzielony (Monostat)
Wzorzec Borga
Budowniczy
Wzorce strukturalne
Adapter
Kompozyt
Dekorator
Fasada
Wzorce behawioralne
Łańcuch odpowiedzialności
Metoda szablonowa
Polecenie
Stan
Pusty obiekt
Końcowe przemyślenia dotyczące wzorców projektowych
Wpływ zastosowania wzorców na projekt
Wzorce projektowe jako teoria
Nazwy w modelach
Podsumowanie
Bibliografia
- 10. Czysta architektura
Od czystego kodu do czystej architektury
Podział odpowiedzialności
Aplikacje monolityczne a mikrousługi
Abstrakcje
Komponenty oprogramowania
Pakiety
Zarządzanie zależnościami
Inne problemy dotyczące zarządzania zależnościami
Wersje artefaktów
Kontenery Docker
Przypadek użycia
Kod
Modele domen
Wywoływanie z aplikacji
Adaptery
Usługi
Analiza
Przepływ zależności
Ograniczenia
Testowalność
Ujawnianie intencji
Podsumowanie
Bibliografia
Podsumowanie końcowe
Tym symbolem wyróżniamy najlepsze sklepy w Allegro. Gdy kupujesz od Super Sprzedawcy, masz pewność doskonałej obsługi klienta i udanych zakupów.
Przewidywany przez Allegro czas dostawy na podstawie wcześniejszych dostaw sprzedającego.
98,6%
Wszystkie przedmioty sprzedającego
Sklep sprzedającego
Przeglądasz ofertę produktu: Czysty kod w Pythonie Mariano Anaya. Widzisz ofertę innego produktu? Zgłoś nam to