Jak używać funkcji lambda w Pythonie [z przykładami]
Opublikowany: 2022-11-10W 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 dlanum2
; 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:

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.

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
toTrue
, gdynum
jest nieparzysta i -
num%2!=0
jestFalse
, gdynum
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.


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.

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 jestsorted(iterable, key=...,reverse= True | False)
.
–key
parametr służy do dostosowania sortowania.
– Parametrreverse
można ustawić naTrue
lubFalse
; wartość domyślna toFalse
.
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
naTrue
, 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()
ireduce()
oraz jako kluczowego parametru do dostosowywania sortowania iteracji Pythona.
Następnie dowiedz się, jak przeprowadzić podział pięter w Pythonie.