SAMOUCZEK JĘZYKA PYTHON ROZDZIAŁY   
Rozdział 4: Struktury danych.

1: Więcej o listach - 2: Używanie listy jako stosu - 3: Używanie listy jako kolejki
4: Mechanizmy programowania funkcjonalnego - 5: Rozszerzenie składni listy - 6: Instrukcje del
7: Listy niemutowalne i sekwencyjne - 8: Słownik - 9: Jeszcze trochę o warunkach
10: Porównanie sekwencji i innych typów

Lekcja 4. Mechanizmy programowania funkcjonalnego.


Istnieją trzy, bardzo użyteczne przy pracy z listami, funkcje: filter(), map(), i reduce().

"filter(funkcja, sekwencja)"zwraca sekwencje (tego samego typu, gdy to możliwe) zawierającą te elementy z listy wejściowej, dla których wywołanie funkcja(element)zwróci wartość prawdziwą. Oto przykład obliczania liczb pierwszych:

>>> def f(x): return x % 2 != 0 and x % 3 != 0
...
>>> filter(f, range(2, 25))
[5, 7, 11, 13, 17, 19, 23]

"map(funkcja, sekwencja)" wywołuje funkcja(element) dla każdego elementu listy wejściowej i zwraca listę wartości zwróconych przez funkcja. Na przykład, aby obliczyć sześcian dla każdego elementu z ciągu liczb:

>>> def sześcian(x): return x*x*x
...
>>> map(szescian, range(1, 11))
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

Przekazana może zostać więcej, niż jedna sekwencja -- funkcja funkcja musi mieć wtedy tyle argumentów, ile zostało podanych sekwencji i jest wywoływana z poszczególnym elementem z każdej sekwencji wejściowej (lub z None jeśli któraś z nich jest krótsza od innej). Jeżeli None został przekazany zamiast pierwszego argumentu map, funkcja zwracająca swoje argumenty jest zastępowana.

Składając te dwa przypadki zauważmy, iż "map(None, lista1, lista2)" jest wygodnym sposobem przekształcenia pary list w listę par. Na przykład:

 >>> sekw = range(8)
>>> def kwadrat(x): return x*x
...
>>> map(None, sekw, map(kwadrat, sekw))
[(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25),
(6, 36), (7, 49)]

"reduce(funkcja, sekwencja)" zwraca pojedynczą wartość, która powstała w wyniku: wywołania dwu-parametrowej funkcji funkcja dla dwóch pierwszych elementów sekwencji, potem dla wyniku tego działania i następnego elementu sekwencji itd. Na przykład, aby obliczyć sumę liczb od 1 do 10:

 >>> def dodaj(x,y): return x+y
...
>>> reduce(dodaj, range(1, 11))
55

Jeśli istnieje tylko jeden element w sekwencji, zwracana jest jego wartość. Jeżeli sekwencja jest pusta, zgłaszany jest wyjątek.

Można przekazać początkową wartość jako trzeci argument wywołania. W tym przypadku wartość ta jest zwracana, gdy sekwencja jest pusta. Funkcja jest stosowana dla wartości początkowej i pierwszego elementu sekwencji, a następnie wynik tej operacji stanowi argument wejściowy wraz z następnym elementem itd. Oto przykład:

 >>> def suma(sekw):
... def dodaj(x,y): return x+y
... return reduce(dodaj, sekw, 0)
...
>>> suma(range(1, 11))
55
>>> suma([])
0
Strona główna - O Pythonie - Interpreter - Samouczek - Przykłady programów - Linki