Generowanie i transformacje danych¶
Programowanie funkcyjne kładzie nacisk na przetwarzanie danych w sposób deklaratywny – poprzez operacje na kolekcjach bez użycia jawnych pętli i modyfikacji zmiennych. W Pythonie typowe techniki tego typu opierają się na funkcjach map(), filter(), reduce() oraz generatorach.
Funkcja map() pozwala na zastosowanie danej funkcji do każdego elementu sekwencji:
1 numbers = [1, 2, 3, 4]
2 doubled = map(lambda x: x * 2, numbers)
3 print(list(doubled)) # wynik: [2, 4, 6, 8]
Funkcja filter() służy do wybierania elementów spełniających określony warunek:
1 numbers = [1, 2, 3, 4, 5, 6]
2 even = filter(lambda x: x % 2 == 0, numbers)
3 print(list(even)) # wynik: [2, 4, 6]
reduce() (z modułu functools) umożliwia akumulację wartości, np. obliczenie sumy lub iloczynu:
1 from functools import reduce
2
3 numbers = [1, 2, 3, 4]
4 product = reduce(lambda x, y: x * y, numbers)
5 print(product) # wynik: 24
Oprócz powyższych funkcji, ważnym elementem stylu funkcyjnego są generatory – konstrukcje umożliwiające leniwe (czyli nieprzechowujące całej sekwencji w pamięci) generowanie danych. Przykład generatora liczb parzystych:
1 def even_numbers(n):
2 for i in range(n):
3 if i % 2 == 0:
4 yield i
5
6 for num in even_numbers(10):
7 print(num, end=" ") # wynik: 0 2 4 6 8
Generatory pozwalają na przetwarzanie dużych zbiorów danych w sposób wydajny pamięciowo, co czyni je szczególnie przydatnymi w praktyce analizy danych, przetwarzania plików czy strumieni.