Przejdź do treści głównej

Programowanie funkcyjne w Pythonie.

https://pl.wikipedia.org/wiki/Programowanie_funkcyjne

Podejście do programowanie (styl) który kładzie nacisk na tworzenie funkcji zamiast na zmianę stanu zmiennych. Koncetruje się bardziej na tym CO ma się wydarzyć a nie jak.

Python zazwyczaj nie jest pierwszym wyborem jeśli chodzi o ten styl pisania kodu - chociażby przez to, ze właściwie wszystko możemy w nim modyfikować, podczas gdy w programowaniu funkcyjnym raczej stawia się na niemodyfikowalność stanu (immutability).

Python jednak daje trochę możliwości, które umożlwiają pozanie tego podejścia np. to, że funkcje w nim możemy traktować jako wartości (first class functions - o czym często nieświadomie można przekonać się zaczynając przygodę z Pythonem i zapminając o dodaniu "()" po nazwie funkcji), to, że możemy zwracać funkcje jako wartości (higher order functions).

Lambda

  • to (zazwyczaj) krótkie funkcje, którym nie przydzielamy nazwy. Najczęściej używane gdy w kodzie potrzebujemy na "juz i teraz" jakąś krótką funkcję (mieszczącą się np. w jednej linijce).
x = lambda a : a + 10
print(x(5)) 
def myfunc(n):
  return lambda a : a * n

mydoubler = myfunc(2)

print(mydoubler(11))

mytripler = myfunc(3)

print(mytripler(11))

Map

  • umożliwia zastosowanie jakiejś funkcji na elementach kolekcji (czyli możemy zastąpić pętle). Zwraca iterator - więc jeśli chcemy finalnie mieć inny typ (np. listę) to musimy dokonać konwersji.
def kwadrat(x):
    return x * x

nums = [1, 2, 3, 4, 5]
do_kwadratu = map(kwadrat, nums)

print(list(do_kwadratu))

Filter

  • umożliwia zastosowanie jakiejś funkcji na kolekcji celem odfiltrowania wartości. Czyli zwraca nam jedynie te wartości na których wykonana funkcja zwróciła True.

Reduce

  • akumuluje wartości zebrane po wykonaniu funkcji na kolekcji

Odnośniki

https://www.w3schools.com/python/python_lambda.asp