Функциональное программирование на Python. Как написать
Товар
- 0 раз купили
- 5 оценка
- 2 осталось
- 4 отзыва
Доставка
Характеристики
Описание
Programowanie funkcyjne w Pythonie. Jak pisać zwięzły, wydajny i ekspresywny kod. Wydanie III
Steven F. Lott
- 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:
Chcesz tworzyć wydajny kod? Naucz się programowania funkcyjnego!
O autorze
Spis treści:
Słowo wstępne
O autorze
O recenzentach
Przedmowa
Rozdział 1. Zrozumieć programowanie funkcyjne
Rozdział 2. Podstawowe pojęcia programowania funkcyjnego
Rozdział 3. Funkcje, iteratory i generatory
Rozdział 4. Praca z kolekcjami
Rozdział 5. Funkcje wyższego rzędu
Rozdział 6. Rekurencje i redukcje
Rozdział 7. Złożone obiekty bezstanowe
Rozdział 8. Moduł itertools
Rozdział 9. Moduł itertools dla kombinatoryków - permutacje i kombinacje
Rozdział 10. Moduł functools
Rozdział 11. Pakiet toolz
Rozdział 12. Techniki projektowania dekoratorów
Rozdział 13. Biblioteka PyMonad
Rozdział 14. Moduły Multiprocessing, Threading i Concurrent.Futures
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
- 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
- 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
- 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"
- 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 Anscombe'a
Obliczenia punktów trasy
Geostrefa punktów trasy
Obiekt wywoływalny dla funkcji row_counter()
- 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()
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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ę
- 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)
- 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
- 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.
Гарантии
Гарантии
Мы работаем по договору оферты и предоставляем все необходимые документы.
Лёгкий возврат
Если товар не подошёл или не соответсвует описанию, мы поможем вернуть его.
Безопасная оплата
Банковской картой, электронными деньгами, наличными в офисе или на расчётный счёт.