PROGRAMOWANIE FUNKCYJNE W PYTHONIE W. 3

80.10

Na stanie

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 Anscombe’a
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

 

Autor

ISBN

978-83-289-0063-9

Liczba stron

Rok wydania

Wydawca

Opinie

Na razie nie ma opinii o produkcie.

Napisz pierwszą opinię o „PROGRAMOWANIE FUNKCYJNE W PYTHONIE W. 3”

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *