Programowanie funkcyjne w Pythonie. Jak pisać zwięzły, wydajny i ekspresywny kod Ozorków

Mimo że Python nie jest typowym językiem programowania funkcyjnego, umożliwia pisanie kodu w sposób właściwy dla tego podejścia. W efekcie można tworzyć zwięzłe i eleganckie programy, które działają szybciej i zużywają mniej zasobów. Jeśli uważasz, że te argumenty uzasadniają zapoznanie się z …

od 51,03 Najbliżej: 26 km

Liczba ofert: 4

Oferta sklepu

Opis

Mimo że Python nie jest typowym językiem programowania funkcyjnego, umożliwia pisanie kodu w sposób właściwy dla tego podejścia. W efekcie można tworzyć zwięzłe i eleganckie programy, które działają szybciej i zużywają mniej zasobów. Jeśli uważasz, że te argumenty uzasadniają zapoznanie się z funkcyjnym podejściem do programowania w Pythonie, to ta książka jest dla Ciebie. Dzięki temu praktycznemu podręcznikowi zrozumiesz, kiedy i dlaczego warto zastosować myślenie funkcyjne, a także jak korzystać z technik funkcyjnych w różnych scenariuszach. Dowiesz się również, jakie narzędzia i biblioteki przeznaczone do tego celu są dostępne w Pythonie i jak używać wyrażeń generatorowych, list składanych i dekoratorów. W tym wydaniu znalazły się nowe rozdziały dotyczące złożonych obiektów bezstanowych, funkcji kombinatorycznych i pakietu toolz, zawierającego zbiór modułów wspomagających pisanie programów funkcyjnych. Umieszczono tu ponadto sporo ciekawych przykładów, dotyczących choćby eksploracyjnej analizy danych i ich czyszczenia. W książce między innymi: najciekawsze biblioteki i wbudowane funkcje wyższego rzędu w Pythonie tworzenie funkcji generatorowych i leniwe wartościowanie implementacja dekoratorów do kompozycji funkcyjnej podpowiedzi typów w Pythonie obsługa współbieżności i implementacja usług sieciowych biblioteka PyMonad i tworzenie symulacji z obsługą stanów Chcesz tworzyć wydajny kod? Naucz się programowania funkcyjnego! Spis treści: Słowo wstępne O autorze O recenzentach Przedmowa Rozdział 1. Zrozumieć programowanie funkcyjne Funkcyjny styl programowania Podobieństwa i różnice pomiędzy stylami proceduralnym i funkcyjnym Korzystanie z paradygmatu funkcyjnego Korzystanie z funkcyjnych hybryd Stos żółwi Klasyczny przykład programowania funkcyjnego Eksploracyjna analiza danych Podsumowanie Ćwiczenia Konwersja imperatywnego algorytmu na kod funkcyjny Konwersja obliczeń krokowych na kod funkcyjny Popraw funkcję sqrt() Etapy czyszczenia danych Optymalizacja kodu funkcyjnego (zaawansowane) Rozdział 2. Podstawowe pojęcia programowania funkcyjnego Funkcje jako obiekty pierwszej klasy Czyste funkcje Funkcje wyższego rzędu Dane niemutowalne Wartościowanie ścisłe i nieścisłe Wartościowanie leniwe i zachłanne Rekurencja zamiast jawnego stanu pętli Funkcyjne systemy typów Znajome terytorium Pojęcia zaawansowane Podsumowanie Ćwiczenia Zastosowanie funkcji map() do sekwencji wartości Funkcje czy wyrażenia lambda? Zoptymalizuj rekurencję Rozdział 3. Funkcje, iteratory i generatory Pisanie czystych funkcji Funkcje jako obiekty pierwszej klasy Korzystanie z łańcuchów znaków Używanie krotek i krotek nazwanych Korzystanie z wyrażeń generatorowych Odkrywanie ograniczeń generatorów Łączenie wyrażeń generatorowych Czyszczenie surowych danych za pomocą funkcji generatorowych Stosowanie generatorów do wbudowanych kolekcji Generatory dla list, słowników i zbiorów Korzystanie z mapowań stanowych Wykorzystanie modułu bisect do tworzenia mapowania Używanie stanowych zbiorów Podsumowanie Ćwiczenia Przepisz funkcję some_function() Alternatywna definicja klasy Mersenne Alternatywy implementacji algorytmów Mapowanie i filtrowanie Słowniki składane Oczyszczanie surowych danych Rozdział 4. Praca z kolekcjami Przegląd rodzajów funkcji Praca z obiektami iterowalnymi Parsowanie pliku XML Parsowanie pliku na wyższym poziomie Tworzenie par elementów z sekwencji Jawne użycie funkcji iter() Rozszerzanie iteracji Stosowanie wyrażeń generatorowych do funkcji skalarnych Wykorzystanie funkcji any() i all() jako redukcji Używanie funkcji len() i sum() dla kolekcji Używanie sum i zliczeń w obliczeniach statystycznych Korzystanie z funkcji zip() do tworzenia struktury i spłaszczania sekwencji Rozpakowywanie spakowanej sekwencji Spłaszczanie sekwencji Nadawanie struktury płaskim sekwencjom Tworzenie struktury płaskich sekwencji - podejście alternatywne Wykorzystanie funkcji sorted() i reversed() do zmiany kolejności elementów Wykorzystanie funkcji enumerate() w celu uwzględnienia numeru porządkowego Podsumowanie Ćwiczenia Liczby palindromiczne Zestaw kart w ręku Zamień funkcję legs() na pairwise() Rozszerz rozwiązanie z funkcją legs(), aby uwzględnić przetwarzanie par Rozdział 5. Funkcje wyższego rzędu Wykorzystanie funkcji max() i min() do wyszukiwania ekstremów Korzystanie z formatu wyrażeń lambda w Pythonie Wyrażenia lambda i rachunek lambda Korzystanie z funkcji map() w celu zastosowania funkcji do kolekcji Wykorzystanie wyrażeń lambda i funkcji map() Użycie funkcji map() w odniesieniu do wielu sekwencji Wykorzystanie funkcji filter() do przekazywania lub odrzucania danych Użycie funkcji filter() do identyfikacji wartości odstających Funkcja iter() z wartością "strażnika" Wykorzystanie funkcji sorted() do porządkowania danych Pisanie funkcji wyższego rzędu - przegląd Pisanie mapowań i filtrów wyższego rzędu Rozpakowywanie danych podczas mapowania Opakowywanie dodatkowych danych podczas mapowania Spłaszczanie danych podczas mapowania Strukturyzacja danych podczas filtrowania Budowanie funkcji wyższego rzędu z wykorzystaniem obiektów wywoływalnych Zapewnienie dobrego projektu funkcyjnego Przegląd wybranych wzorców projektowych Podsumowanie Ćwiczenia Klasyfikacja stanu Klasyfikacja stanu, część II Optymalizacja parsera plików Rozdział 6. Rekurencje i redukcje Proste rekurencje numeryczne Implementacja ręcznej optymalizacji ogonowej Pozostawienie rekurencji bez zmian Obsługa trudnego przypadku optymalizacji ogonowej Przetwarzanie kolekcji za pomocą rekurencji Optymalizacja ogonowa dla kolekcji Używanie operatora przypisania (czasami zwanego morsem) w rekurencjach Redukcje i składanie kolekcji z wielu elementów w jeden element Optymalizacja wywołań ogonowych za pomocą kolejek dwukierunkowych Redukcja grupowania - z wielu elementów do mniejszej liczby Budowanie mapowania za pomocą metody Counter Budowanie mapowania przez sortowanie Grupowanie lub podział danych według wartości klucza Pisanie bardziej ogólnych redukcji grupujących Pisanie redukcji wyższego rzędu Pisanie parserów plików Podsumowanie Ćwiczenia Wielokrotna rekurencja i buforowanie Refaktoryzacja funkcji all_print() Parsowanie plików CSV Klasyfikacja stanu, część III Dane silnika Diesla Rozdział 7. Złożone obiekty bezstanowe Używanie krotek do zbierania danych Używanie obiektów NamedTuple do zbierania danych Używanie do zbierania danych dekoratora dataclass z parametrem frozen Inicjalizacja złożonych obiektów i obliczenia właściwości Używanie modułu pyrsistent do zbierania danych Unikanie stanowych klas dzięki wykorzystaniu rodzin krotek Obliczanie korelacji rangowej Spearmana Polimorfizm i dopasowywanie typów z wzorcami Podsumowanie Ćwiczenia Zamrożone słowniki Sekwencje podobne do słowników Modyfikacja funkcji rank_xy() w celu wykorzystywania natywnych typów Popraw funkcję rank_corr() Modyfikacja funkcji legs() w celu wykorzystania modułu pyrsistent Rozdział 8. Moduł itertools Praca z iteratorami nieskończonymi Liczenie za pomocą count() Zliczanie z wykorzystaniem argumentów zmiennoprzecinkowych Wielokrotne iterowanie cyklu za pomocą funkcji cycle() Powtarzanie pojedynczej wartości za pomocą funkcji repeat() Używanie iteratorów skończonych Przypisywanie liczb za pomocą funkcji enumerate() Obliczanie sum narastających za pomocą funkcji accumulate() Łączenie iteratorów za pomocą funkcji chain() Podział iteratora na partycje za pomocą funkcji groupby() Scalanie obiektów iterowalnych za pomocą funkcji zip_longest() i zip() Tworzenie par za pomocą funkcji pairwise() Filtrowanie z wykorzystaniem funkcji compress() Zbieranie podzbiorów za pomocą funkcji islice() Filtrowanie stanowe z wykorzystaniem funkcji dropwhile() i takewhile() Dwa podejścia do filtrowania za pomocą funkcji filterfalse() i filter() Zastosowanie funkcji do danych z wykorzystaniem funkcji starmap() i map() Klonowanie iteratorów za pomocą funkcji tee() Receptury modułu itertools Podsumowanie Ćwiczenia Zoptymalizuj funkcję find_first() Porównaj rozwiązanie z rozdziału 4. z recepturą itertools.pairwise() Porównaj rozwiązanie z rozdziału 4. z recepturą itertools.tee() Podział zestawu danych do celów szkolenia i testowania Szeregowanie rang Rozdział 9. Moduł itertools dla kombinatoryków - permutacje i kombinacje Wyliczanie iloczynu kartezjańskiego Redukowanie iloczynu Obliczanie odległości Uzyskanie wszystkich pikseli i wszystkich kolorów Poprawa wydajności Przeformowanie problemu Łączenie dwóch transformacji Permutacje zbioru wartości Generowanie wszystkich kombinacji Kombinacje z powtórzeniami Receptury Podsumowanie Ćwiczenia Alternatywne obliczenia odległości Rzeczywista dziedzina wartości kolorów pikseli Punktacja ręki w grze Cribbage Rozdział 10. Moduł functools Narzędzia przetwarzania funkcji Memoizacja wcześniejszych wyników za pomocą dekoratora cache Definiowanie klas z dekoratorem total_ordering Stosowanie argumentów częściowych za pomocą funkcji partial() Redukcja zbiorów danych za pomocą funkcji reduce() Łączenie funkcji map() i reduce() Korzystanie z funkcji reduce() i partial() Użycie funkcji map() i reduce() do oczyszczania surowych danych Korzystanie z funkcji groupby() i reduce() Unikanie problemów z funkcją reduce() Obsługa wielu typów za pomocą funkcji singledispatch Podsumowanie Ćwiczenia Porównanie funkcji string.join() i reduce() Rozszerzenie funkcji comma_fix() Modyfikacja funkcji clean_sum() Rozdział 11. Pakiet toolz Funkcja starmap z pakietu itertools Redukcje z wykorzystaniem funkcji modułu operator Korzystanie z pakietu toolz Wybrane funkcje modułu itertoolz Wybrane funkcje modułu dicttoolz Wybrane funkcje modułu functoolz Podsumowanie Ćwiczenia Zamiana dzielenia na ułamek Parsowanie pliku kolorów Analiza kwartetu Anscombea Obliczenia punktów trasy Geostrefa punktów trasy Obiekt wywoływalny dla funkcji row_counter() Rozdział 12. Techniki projektowania dekoratorów Dekoratory jako funkcje wyższego rzędu Korzystanie z funkcji update_wrapper() z modułu functools Zagadnienia przekrojowe Funkcje złożone Wstępne przetwarzanie nieprawidłowych danych Dekoratory z parametrami Implementacja bardziej złożonych dekoratorów Kwestie złożonego projektu Podsumowanie Ćwiczenia Konwersje dat i godzin Optymalizacja dekoratora Funkcje obsługujące wartości None Logowanie Sprawdzanie "na sucho" Rozdział 13. Biblioteka PyMonad Pobieranie i instalacja modułu PyMonad Kompozycja funkcyjna i rozwijanie funkcji Korzystanie z rozwijanych funkcji wyższego rzędu Kompozycja funkcyjna z wykorzystaniem biblioteki PyMonad Funktory - uczyń funkcję ze wszystkiego Korzystanie z wartościowanej leniwie monady ListMonad() Funkcja monady bind() Implementacja symulacji za pomocą monad Dodatkowe własności biblioteki PyMonad Podsumowanie Ćwiczenia Popraw aproksymację z wykorzystaniem funkcji arcus tangens Obliczenia statystyczne Walidacja danych Wiele modeli Rozdział 14. Moduły Multiprocessing, Threading i Concurrent.Futures Programowanie funkcyjne a współbieżność Co naprawdę oznacza współbieżność? Warunki brzegowe Współdzielenie zasobów za pomocą procesów lub wątków Jak uzyskać największe korzyści? Korzystanie z pul wieloprocesowych i zadań Przetwarzanie wielu dużych plików Parsowanie plików logu - pobieranie wierszy Parsowanie wierszy logu do postaci nazwanych krotek Parsowanie dodatkowych pól obiektu Access Filtrowanie szczegółów dostępu Analiza szczegółów dostępu Pełny proces analizy Korzystanie z puli wieloprocesowej w celu przetwarzania równoległego Korzystanie z funkcji apply() do wykonywania pojedynczych żądań Bardziej złożone architektury przetwarzania wieloprocesowego Korzystanie z modułu concurrent.futures Korzystanie z pul wątków modułu concurrent.futures Korzystanie z modułów threading i queue Korzystanie z funkcji asynchronicznych Projektowanie współbieżnego przetwarzania Podsumowanie Ćwiczenia Leniwe parsowanie Filtrowanie szczegółów ścieżki dostępu Dodaj dekoratory @cache Utworzenie przykładowych danych Zmiana struktury potoku Rozdział 15. Podejście funkcyjne do usług sieciowych Model HTTP żądanie-odpowiedź Wstrzykiwanie stanu za pomocą plików cookie Serwer o projekcie funkcyjnym Szczegóły widoku funkcyjnego Zagnieżdżanie usług Standard WSGI Zgłaszanie wyjątków podczas przetwarzania WSGI Praktyczne aplikacje webowe Definiowanie usług sieciowych jako funkcji Przetwarzanie za pomocą aplikacji Flask Warstwa dostępu do danych Monitorowanie użycia Podsumowanie Ćwiczenia Aplikacja WSGI - powitanie Aplikacja WSGI - demo Serializacja danych do formatu XML Serializacja danych do formatu HTML O autorze: Steven F. Lott ma blisko pięćdziesiąt lat doświadczenia w programowaniu — kiedy rozpoczynał przygodę z kodem, komputery były duże, drogie i rzadkie. Od ponad dziesięciu lat używa Pythona do rozwiązywania problemów biznesowych; napisał kilka cenionych książek o tym języku. Obecnie jest technomadą . Mieszka na wschodnim wybrzeżu USA.

Specyfikacja

Podstawowe informacje

Autor
  • Steven F. Lott
Wydawnictwo
  • Helion
Okładka
  • Miękka
Rok wydania
  • 2023
Ilość stron
  • 456
Tematyka
  • Programowanie
ISBN
  • 9788328900639
Model
  • 9788328900639