Funkcje lambda Pythona z praktycznymi przykładami

Opublikowany: 2021-06-21

Funkcje lambda Pythona to te funkcje, które są małe i są zdefiniowane bez nazwy. W Pythonie słowo kluczowe „def” służy do definiowania funkcji. Jednak w przypadku funkcji anonimowych słowo kluczowe „lambda” służy do ich zdefiniowania. Dlatego nazwa „funkcje lambda”. Funkcje mogą mieć nazwę lub nie.

W porównaniu do zwykłych funkcji w Pythonie, funkcje lambda są krótkie.

Funkcje lambda zostały dodane do składni języków programowania, takich jak Python, Java, C++, C# itp., które mają w swojej składni. Chociaż jest używany jako podstawowa koncepcja w językach ML lub LISP.

Artykuł skupi się na koncepcji funkcji lambda Pythona i ich wykorzystaniu.

Ze względu na rodzaj języka programowania, funkcje lambda mogą być używane zamiennie z następującymi terminami:

  • Funkcje anonimowe
  • Funkcje lambda
  • Wyrażenia lambda
  • Abstrakcje lambda
  • Forma lambda
  • Literały funkcyjne

Spis treści

Rachunek lambda

Obliczanie lambda to model obliczeniowy, na podstawie którego budowane są wyrażenia lambda. Rachunek lambda opiera się na czystej abstrakcji i został sformalizowany przez Alonzo Church. Znany również jako abstrakcje lambda, nawiązuje do oryginalnego modelu stworzonego przez Alonzo Churcha.

Za pomocą tej koncepcji można zakodować dowolne obliczenia.

Składnia funkcji lambda:

Poniższa składnia jest używana podczas korzystania z funkcji lambda w Pythonie.

argumenty lambda: wyrażenie

W funkcji lambda w python może być dowolna liczba argumentów . Ale funkcje mogą mieć tylko jedno wyrażenie. To wyrażenie jest najpierw oceniane, a następnie zwracane. Użycie funkcji lambda znajduje się wszędzie tam, gdzie są wymagania dotyczące obiektów funkcji.

Rozważmy przypadek, w którym anonimowa funkcja z dwoma argumentami jest zdefiniowana za pomocą lambda, ale nie jest powiązana z żadną zmienną:

lambda x, y: x + y

Tutaj dwa argumenty są przyjmowane przez funkcję i zwracana jest suma.

Funkcja lambda ma kilka cech charakterystycznych:

  • W treści funkcji lambda nie może być żadnych instrukcji, ale mogą zawierać tylko wyrażenia.
  • Kod wykonawczy to tylko jedna linia.
  • Adnotacje typu nie są obsługiwane przez funkcję lambda w python .
  • Dozwolone jest natychmiastowe wywołanie.

Nie można używać oświadczeń

Jak wspomniano, podczas definiowania funkcji lambda nie może być żadnych instrukcji. Jeśli użytkownik użyje instrukcji, takich jak pass, return, raise lub attach, wystąpi wyjątek SyntaxError. Wynik wyjątku można wyświetlić za pomocą poniższego kodu

Źródło

W powyższym kodzie wystąpił błąd składni, gdy analizowany był kod, który zawierał instrukcję attach w treści funkcji lambda.

funkcja lambda zawiera tylko jedno wyrażenie

W przeciwieństwie do wszystkich standardowych funkcji normalnych w Pythonie, funkcja lambda w Pythonie może zawierać tylko jedno wyrażenie. Treść funkcji lambda może mieć wyrażenie rozsiane po całym tekście poprzez użycie wielu linii z nawiasami. Jednak nadal pozostaje jednym wyrazem.

Źródło

Ciąg „nieparzysty” jest zwracany, gdy istnieje argument „nieparzysty”, a ciąg „parzysty” jest zwracany, gdy występuje argument „parzysty”. W powyższym kodzie użyto dwóch wierszy, ponieważ znajdują się one w nawiasach. Ale pozostaje jako jedno wyrażenie.

Wpisz adnotacje

Dzięki dostępności „podpowiedzi typu” w pythonie, normalne funkcje są teraz preferowane w stosunku do funkcji lambda w pythonie. Dzięki dostępności narzędzi typu mypy, pyre itp. błąd typu może zostać wyłapany za pomocą full_name(). Błąd składni związany z funkcją lambda jest zgłaszany w czasie wykonywania.

Natychmiastowe wykonanie funkcji (IIFE)

Ta funkcja nie może być używana poza interpreterem Pythona. Definicję wyrażenia lambda w Pythonie można przekazać do funkcji wyższego rzędu, takich jak map() itp.

Argumenty w funkcji lambda

Różne sposoby są obsługiwane w wyrażeniach lambda Pythona do przekazywania argumentów, takich jak:

  • Argumenty pozycyjne
  • Nazwane argumenty, znane również jako argumenty słów kluczowych
  • Zmienna lista argumentów zwana również varargs.
  • Zmienna lista argumentów słów kluczowych
  • Argumenty zawierające tylko słowa kluczowe.

Dekoratory w wyrażeniu lambda Pythona

Dekorator można zdefiniować jako implementację wzorca pozwalającą na dodanie zachowania do klasy lub funkcji. Składnia @decorator jest używana jako przedrostek funkcji do wyrażania dekoratora w Pythonie

Tylko z argumentem 'Python' wypisywana jest funkcja decor_function() . Dodatkowym zachowaniem, które zostanie wydrukowane, jest „Wywołanie funkcji „dekorowana_funkcja”.

Python umożliwia dodanie dekoratora do funkcji lambda, chociaż użycie składni @decorator nie jest wymagane. Dekorator działa jak funkcja, która wywołuje funkcję lambda.

<lambda> pojawia się tam, gdzie identyfikowana jest funkcja lambda. Natomiast w przypadku normalnej funkcji, czyli add_two, jest ona wyraźnie zidentyfikowana.

Na potrzeby debugowania można w ten sposób udekorować funkcje lambda.

Zamknięcie

Closure() w Pythonie jest zdefiniowana jako funkcja, w której wolne zmienne z wyjątkiem parametrów, które są używane w funkcji, są powiązane z określonymi wartościami, które są zdefiniowane w zakresie funkcji. Zamknięcia możemy wywołać z dowolnego miejsca. Funkcje lambda w Pythonie mogą działać jako domknięcia w sposób, w jaki normalne funkcje działają jako domknięcie.

Korzystanie z funkcji lambda

  • Ilekroć wymagamy użycia funkcji przez krótszy czas, w takim przypadku używane są funkcje lambda.
  • Do przekazywania funkcji do funkcji funkcji wyższego rzędu stosuje się funkcje lambda. Funkcje są przekazywane jako argumenty do tych funkcji wyższego rzędu.
  • Funkcje lambda w Pythonie mogą być używane z innymi wbudowanymi funkcjami, takimi jak map() itp.

Testowanie funkcji lambda

Za pomocą modułów doctest i unittest można przetestować funkcje lambda w pythonie:

  • Moduły Unittest testują funkcje lambda jak zwykłe funkcje.
  • W przypadku modułu doctest kod Pythona jest wyodrębniany z docstring , w celu wykonania testu. Składnia funkcji lambda nie zezwala na docstring . Ale ciąg można przypisać do elementu _doc_ lambdy, która jest nazywana.

Przykłady funkcji lambda Pythona

W poniższym kodzie zdefiniowano funkcję o nazwie „tożsamość”, w której zwracany jest argument. Jest zdefiniowany jako standardowa funkcja Pythona poprzez użycie słowa kluczowego „def”.

>>> def tożsamość (x);

….. powrót x

Tutaj x jest traktowane jako argument przez funkcję „tożsamość” i po wywołaniu zwraca argument.

Napisanie tego samego kodu przy użyciu lambdy będzie wyglądało następująco:

lambda x: x

Wyrażenie składa się z trzech części: Lambda jako słowa kluczowego, x, która jest wtedy zmienną związaną, oraz X, która jest treścią kodu.

  • Zmienna powiązana odwołuje się do argumentu, który jest przekazywany do funkcji lambda. Jednak wolne zmienne to te, które nie są powiązane i można się do nich odwoływać w treści wyrażenia. Stała może być wolną zmienną lub zmiennymi zdefiniowanymi w zakresie funkcji.

Powyższe wyrażenie można opisać jako

>>> lambda x: x + 1

Tutaj funkcja dodaje 1 do argumentu. Funkcję można dodać do argumentu, otaczając zarówno funkcję, jak i argument za pomocą nawiasów.

>>>(lambda x: x + 1)(2)

3

Do obliczenia wartości w wyrażeniu stosowana jest strategia redukcji. Podobnie jak w powyższym przykładzie, zmienną związaną „x” można zastąpić argumentem 2.

(lambda x: x + 1 )(2) = Lambda 2: 2 + 1

= 2 + 1

= 3

Funkcja lambda będąca wyrażeniem, nazewnictwo można wykonać, a powyższy kod można przepisać jako

>>> add_one = Lambda x : x + 1

>>> dodaj_jeden(2)

3

Jest to równoznaczne z pisaniem:

def add_one(x):

powrót x + 1

Pojedynczy argument jest przyjmowany przez funkcje lambda. Ponadto podczas definiowania funkcji lambda w Pythonie nie ma nawiasów wokół funkcji.

W przypadku przekazywania więcej niż jednego argumentu do funkcji lambda Pythona , argumenty są wymienione i rozdzielane za pomocą przecinka (,). Podczas wymieniania argumentów nie powinno być nawiasów. Poniżej przedstawiono przykład funkcji wieloargumentowych:

Tutaj dwa argumenty są przyjmowane przez funkcję lambda pod full_name. Funkcja, która interpoluje pierwszy i ostatni parametr, zwraca ciąg znaków. Z kodu wynika, że ​​podczas definiowania funkcji lambda nie używano żadnego nawiasu. Wywołanie funkcji lambda odbywa się w taki sam sposób, jak w przypadku standardowej funkcji w Pythonie, tj. przy użyciu nawiasów otaczających argumenty.

Funkcje lambda Pythona z funkcją filter()

W Pythonie funkcja filter() przyjmuje argument jako listę i funkcję. Poprzez pozycje listy można wywołać funkcję, która zwraca nową listę pozycji. Funkcja dla tej nowo utworzonej listy ma wartość True .

Poniżej pokazano przykład funkcji filter() , która służy do filtrowania liczb parzystych zawartych na liście.

Źródło

Wyjściem generowanym przez program jest nowa lista: [4, 6, 8, 12].

Funkcja lambda Pythona z map()

Lista i funkcja są traktowane jako argument w funkcji python map(). Wszystkie elementy zawarte na liście wywołują funkcję, która zwraca nowo utworzoną listę z elementami zwracanymi przez funkcję.

Wniosek

Funkcje lambda Pythona to te funkcje, które są jednowierszowe i są zadeklarowane bez nazwy, tj. funkcja anonimowa. Do funkcji lambda, która może mieć tylko jedno wyrażenie, można przekazać kilka liczb argumentów. Czasami funkcję lambda można przekazać do innych funkcji jako argument. Funkcja zdefiniowana za pomocą słowa kluczowego „def” w pythonie może zachowywać się jak zwykła funkcja.

W artykule wyjaśniono zatem koncepcje funkcji lambda w Pythonie, ich zastosowanie z innymi funkcjami, a także kilka przykładów. Jeśli jesteś zainteresowany zdobyciem wiedzy na temat języka programowania i doskonaleniem umiejętności kodowania, możesz sprawdzić kurs „ Executive PG Program in Data Science ” oferowany przez upGrad . Jest specjalnie zaprojektowany dla wszystkich początkujących profesjonalistów w wieku od 21 do 45 lat, którzy chcą zdobyć umiejętności kodowania w nauce o danych. Jeśli chcesz zrobić krok w kierunku swoich marzeń, zgłoś się i spójrz na korzyści płynące z kursu. Dzięki praktycznym projektom branżowym kurs zapewniany przez IIIT-B ma na celu zaspokojenie Twoich potrzeb i przygotowanie do nadchodzących najważniejszych branż.

Jaka jest różnica między funkcją normalną a funkcją lambda?

Wiemy, że funkcja w Pythonie jest definiowana za pomocą słowa kluczowego def. Podobnie funkcja lambda jest definiowana za pomocą słowa kluczowego lambda. Rozważ poniższy przykład, aby dogłębnie zrozumieć różnicę między nimi:
# Normalna funkcja def sq(x): return x*x # Funkcja lambda lambda_sq = lambda x: x*x # Wywołanie funkcji normalnie # Zdefiniowanej funkcji print(sq(10)) # używając funkcji lambda print(lambda_sq(10)) }
Powyższy przykład ilustruje 2 funkcje obliczające kwadrat liczby. Bez lambdy musimy stworzyć funkcję sq(x), a następnie zwrócić kwadrat. Z drugiej strony przy lambdzie cała funkcja sprowadza się do jednej linii. Lambda nie wymaga zwrotu.