Jak używać funkcji lambda w Pythonie [z przykładami]

Opublikowany: 2022-11-10

W tym samouczku dowiesz się wszystkiego o funkcjach lambda w Pythonie – od składni do definiowania funkcji lambda po różne przypadki użycia z przykładami kodu.

W Pythonie lambdy są anonimowymi funkcjami, które mają zwięzłą składnię i mogą być używane z innymi pomocnymi funkcjami wbudowanymi. Pod koniec tego samouczka dowiesz się, jak definiować funkcje lambda i kiedy powinieneś rozważyć ich użycie zamiast zwykłych funkcji Pythona.

Zaczynajmy!

Funkcja lambda Pythona: składnia i przykłady

Oto ogólna składnia do definiowania funkcji lambda w Pythonie:

 lambda parameter(s):return value

W powyższej ogólnej składni:

  • lambda to słowo kluczowe, którego należy użyć do zdefiniowania funkcji lambda, po której następuje jeden lub więcej parametrów , które funkcja powinna przyjąć.
  • Parametry i zwracaną wartość oddziela dwukropek .

Definiując funkcję lambda, należy upewnić się, że wartość zwracana jest obliczana przez obliczenie wyrażenia, które obejmuje pojedynczy wiersz kodu. Zrozumiesz to lepiej, gdy będziemy kodować przykłady.

Przykłady funkcji lambda w Pythonie

Najlepszym sposobem zrozumienia funkcji lambda jest przepisanie zwykłych funkcji Pythona na funkcje lambda.

Możesz kodować w Pythonie REPL lub w internetowym edytorze Pythona Geekflare.

#1 . Rozważmy następującą funkcję square() , która przyjmuje liczbę num jako argument i zwraca kwadrat tej liczby.

 def square(num): return num*num

Możesz wywołać funkcję z argumentami i sprawdzić, czy działa poprawnie.

 >>> square(9) 81 >>> square(12) 144

Możesz przypisać to wyrażenie lambda do nazwy zmiennej, powiedzmy, square1 , aby definicja funkcji była bardziej zwięzła: square1 = lambda num: num*num liczba, a następnie wywołaj funkcję square1 z dowolną liczbą jako argumentem. Wiemy jednak, że lambdy są funkcjami anonimowymi, dlatego należy unikać przypisywania ich do zmiennej.

W przypadku funkcji square() parametr to num , a zwracana wartość to num*num . Po ich zidentyfikowaniu możemy je podłączyć do wyrażenia lambda i wywołać je argumentem, jak pokazano:

 >>> (lambda num: num*num)(2) 4

Jest to koncepcja natychmiastowego wyrażenia funkcji, w której wywołujemy funkcję zaraz po jej zdefiniowaniu.

#2 . Następnie przepiszmy kolejną prostą funkcję add() , która pobiera liczby, num1 i num2 , i zwraca ich sumę, num1 + num2 .

 def add(num1,num2): return num1 + num2

Wywołajmy funkcję add() z dwiema liczbami jako argumentami:

 >>> add(4,3) 7 >>> add(12,5) 17 >>> add(12,6) 18

W tym przypadku num1 i num2 to dwa parametry, a zwracana wartość to num1 + num2 .

 >>> (lambda num1, num2: num1 + num2)(3,7) 10

Funkcje Pythona mogą również przyjmować domyślne wartości parametrów. Zmodyfikujmy definicję funkcji add() i ustawmy domyślną wartość parametru num2 na 10.

 def add(num1, num2=10): return num1 + num2

W następujących wywołaniach funkcji:

  • W pierwszym wywołaniu funkcji wartość num1 to 1, a wartość num2 to 3. Kiedy przekazujesz wartość num2 w wywołaniu funkcji, ta wartość jest używana; funkcja zwraca 4.
  • Jeśli jednak przekażesz tylko jeden argument ( num1 to 7), domyślna wartość 10 jest używana dla num2 ; funkcja zwraca 17.
 >>> add(1,3) 4 >>> add(7) 17

Podczas pisania funkcji, które przyjmują wartości domyślne dla niektórych parametrów jako wyrażenia lambda, można określić wartość domyślną podczas definiowania parametrów.

 >>> (lambda num1, num2 = 10: num1 + num2)(1) 11

Kiedy należy używać funkcji lambda w Pythonie?

Teraz, gdy znasz już podstawy funkcji lambda w Pythonie, oto kilka przypadków użycia:

  • Jeśli masz funkcję, której wyrażenie zwracane jest pojedynczym wierszem kodu i nie musisz odwoływać się do funkcji w innym miejscu w tym samym module, możesz użyć funkcji lambda. Aby to zrozumieć, zakodowaliśmy również kilka przykładów.
  • Możesz używać funkcji lambda podczas korzystania z funkcji wbudowanych, takich jak map(), filter() i Reduce().
  • Funkcje lambda mogą być pomocne w sortowaniu struktur danych Pythona, takich jak listy i słowniki.

Jak używać Pythona Lambda z wbudowanymi funkcjami

1. Używanie Lambdy z map()

Funkcja map() przyjmuje iterowalną i funkcję i stosuje ją do każdego elementu w iterowalnym, jak pokazano:

python-lambda-z-mapą

Stwórzmy listę nums i użyjmy funkcji map() , aby utworzyć nową listę zawierającą kwadrat każdej liczby na liście nums . Zwróć uwagę na użycie funkcji lambda do zdefiniowania operacji do kwadratu.

 >>> nums = [4,5,6,9] >>> list(map(lambda num:num*num,nums)) [16, 25, 36, 81]

Ponieważ funkcja map() zwraca obiekt mapy, powinniśmy rzutować go na listę.

️ Zapoznaj się z tym samouczkiem dotyczącym funkcji map() w Pythonie.

2. Używanie Lambdy z filter()

Zdefiniujmy nums , listę liczb:

 >>> nums = [4,5,6,9]

Załóżmy, że chcesz przefiltrować tę listę i zachować tylko liczby nieparzyste.

Możesz użyć wbudowanej w Pythona funkcji filter() .

Funkcja filter() przyjmuje warunek i iterowalność : filter(condition, iterable) . Wynik zawiera tylko te elementy oryginalnej iteracji, które spełniają warunek. Możesz rzutować zwrócony obiekt do iterowalnego Pythona, takiego jak lista.

python-lambda-z-filtrem

Aby odfiltrować wszystkie liczby parzyste, zachowamy tylko liczby nieparzyste. Zatem wyrażenie lambda powinno mieć lambda num: num%2!=0 . Ilość num%2 to reszta z dzielenia num przez 2.

  • num%2!=0 to True , gdy num jest nieparzysta i
  • num%2!=0 jest False , gdy num jest parzysta.
 >>> nums = [4,5,6,9] >>> list(filter(lambda num:num%2!=0,nums)) [5, 9]

3. Używanie Lambdy z Reduce()

Funkcja reduce() przyjmuje iterację i funkcję. Zmniejsza iterację przez zastosowanie funkcji iteracyjnie na elementach iterowalności.

python-lambda-z-redukcją

Aby użyć funkcji Reduce reduce() , musisz zaimportować ją z wbudowanego modułu functools :

 >>> from functools import reduce

Użyjmy funkcji Reduce reduce() , aby obliczyć sumę wszystkich liczb z listy nums . Definiujemy wyrażenie lambda: lambda num1,num2:num1+num2 , jako funkcję sumy redukującej.

Operacja redukcji będzie wyglądać tak: f(f(f(4,5),6),9) = f(f(9,6),9) = f(15,9) = 24. Tutaj f jest operacja sumowania na dwóch pozycjach listy, zdefiniowanych przez funkcję lambda.

 >>> from functools import reduce >>> nums = [4,5,6,9] >>> reduce(lambda num1,num2:num1+num2,nums) 24

Funkcje lambda Pythona do dostosowywania sortowania

Oprócz używania funkcji lambda z wbudowanymi funkcjami Pythona, takimi jak map() , filter() i reduce() , możesz ich również używać do dostosowywania wbudowanych funkcji i metod używanych do sortowania.

obrazek

1. Sortowanie list Pythona

Podczas pracy z listami Pythona często będziesz musiał je posortować w oparciu o określone kryteria sortowania. Aby posortować listy Pythona w miejscu, możesz użyć na nich wbudowanej metody sort() . Jeśli potrzebujesz posortowanej kopii listy, możesz użyć funkcji sorted() .

Składnia do użycia funkcji sorted() Pythona jest sorted(iterable, key=...,reverse= True | False) .

key parametr służy do dostosowania sortowania.
– Parametr reverse można ustawić na True lub False ; wartość domyślna to False .

Podczas sortowania list liczb i ciągów domyślne sortowanie odbywa się odpowiednio w kolejności rosnącej i alfabetycznej. Czasami jednak możesz chcieć zdefiniować niestandardowe kryterium sortowania.

Rozważ poniższą listę fruits . Załóżmy, że chcesz otrzymać posortowaną kopię listy. Należy posortować łańcuchy według liczby wystąpień w nich „p” – w kolejności malejącej.

 >>> fruits = ['apple','pineapple','grapes','mango']

Czas użyć opcjonalnego parametru key . Ciąg znaków jest w Pythonie iterowalny i aby uzyskać liczbę wystąpień w nim znaku, możesz użyć wbudowanej metody .count() . Ustawiamy więc key na lambda x:x.count('p') , aby sortowanie było oparte na liczbie wystąpień 'p' w ciągu.

 >>> fruits = ['apple','pineapple','grapes','mango'] >>> sorted(fruits,key=lambda x:x.count('p'),reverse=True) ['pineapple', 'apple', 'grapes', 'mango']

W tym przykładzie:

  • key do sortowania jest liczba wystąpień znaku „p”, który jest zdefiniowany jako wyrażenie lambda.
  • Ponieważ ustawiliśmy parametr reverse na True , sortowanie odbywa się w kolejności malejącej liczby wystąpień „p”.

Na liście fruits słowo „ananas” zawiera 3 wystąpienia „p”, a ciągi „jabłko”, „winogrona” i „mango” zawierają odpowiednio 2, 1 i 0 wystąpień „p”.

Zrozumienie stabilnego sortowania

Rozważ inny przykład. Dla tego samego kryterium sortowania przedefiniowaliśmy listę fruits . Tutaj „p” występuje w ciągach „jabłko” i „winogrona” odpowiednio dwa razy i raz. I nigdy nie występuje w smyczkach „mango” i „melon”.

 >>> fruits = ['mango','apple','melon','grapes'] >>> sorted(fruits,key=lambda x:x.count('p'),reverse=True) ['apple', 'grapes', 'mango', 'melon']

Na liście wyjściowej „mango” pojawia się przed „melonem”, mimo że oba nie mają znaku „p”. Ale dlaczego tak jest? Funkcja sorted() wykonuje stabilne sortowanie; więc gdy liczba 'p' jest równa dla dwóch ciągów, kolejność elementów w oryginalnej liście fruits jest zachowana.

W ramach szybkiego ćwiczenia zamień pozycje „mango” i „melon” na liście fruits , posortuj listę według tego samego kryterium i obserwuj wyniki.

️ Dowiedz się więcej o sortowaniu list Pythona.

2. Sortowanie słownika Pythona

Możesz także używać lambd podczas sortowania słowników Pythona. Rozważmy następujący słownik price_dict zawierający pozycje i ich ceny.

 >>> price_dict = { ... 'Milk':10, ... 'Honey':15, ... 'Bread':7, ... 'Candy':3 ... }

Aby uzyskać pary klucz-wartość słownika jako listę krotek, możesz użyć wbudowanej metody słownikowej .items() :

 >>> price_dict_items = price_dict.items() dict_items([('Milk', 10), ('Honey', 15), ('Bread', 7), ('Candy', 3)])

W Pythonie wszystkie iterowalne: listy, krotki, ciągi i inne, są zgodne z indeksowaniem zerowym. Tak więc pierwsza pozycja jest pod indeksem 0, druga pod indeksem 1 i tak dalej.

Chcielibyśmy posortować według wartości, czyli ceny każdego elementu w słowniku. W każdej krotce na liście price_dict_items pozycja o indeksie 1 jest ceną. Ustawiamy więc key na lambda x:x[1] , ponieważ użyje on elementu o indeksie 1, czyli cenie, do sortowania słownika.

 >>> dict(sorted(price_dict_items,key=lambda x:x[1])) {'Candy': 3, 'Bread': 7, 'Milk': 10, 'Honey': 15}

Na wyjściu pozycje słownika zostały posortowane rosnąco według cen: zaczynając od „Cukierki”, w cenie 3 jednostki, do „Miód”, w cenie 15 jednostek.

️ Aby dowiedzieć się więcej, zapoznaj się z tym szczegółowym przewodnikiem na temat sortowania słownika Pythona według klucza i wartości.

Podsumowując

I masz to! Nauczyłeś się definiować funkcje lambda i efektywnie ich używać z innymi wbudowanymi funkcjami Pythona. Oto podsumowanie najważniejszych wniosków:

  • W Pythonie lambdy są anonimowymi funkcjami , które mogą przyjmować wiele argumentów i zwracać wartość; wyrażenie, które ma zostać ocenione w celu wygenerowania tej zwracanej wartości, powinno mieć jeden wiersz kodu. Mogą być używane do zwięzłości definicji małych funkcji.
  • Aby zdefiniować funkcję Lambda, możesz użyć składni: parametr(y) lambda: zwracana wartość .
  • Niektóre z ważnych przypadków użycia obejmują używanie ich z funkcjami map() , filter() i reduce() oraz jako kluczowego parametru do dostosowywania sortowania iteracji Pythona.

Następnie dowiedz się, jak przeprowadzić podział pięter w Pythonie.