2.1 Definicja funkcji lambda
Funkcje lambda, znane również jako anonimowe funkcje, to kompaktowe funkcje jednowierszowe bez nazwy, które można tworzyć za pomocą słowa kluczowego lambda
.
W przeciwieństwie do zwykłych funkcji, definiowanych za pomocą def
, funkcje lambda są tworzone na bieżąco i zazwyczaj używane do prostych operacji, które można wykonać w jednej linii.
Składnia funkcji lambda składa się ze słowa kluczowego lambda
, po którym następują argumenty, dwukropek i wyrażenie:
lambda argumenty: wyrażenie
Funkcje lambda mogą przyjmować dowolną liczbę argumentów, ale mogą zawierać tylko jedno wyrażenie. Wartość tego wyrażenia jest automatycznie zwracana.
Przykłady:
Funkcja lambda | Zwykła funkcja |
---|---|
|
|
|
|
|
|
2.2 Zastosowanie funkcji lambda
Funkcje lambda są często używane w połączeniu z innymi funkcjami, takimi jak map()
, filter()
i sorted()
, a także jako argumenty dla innych funkcji.
Użycie z map()
Funkcja map()
stosuje zadaną funkcję do każdego elementu obiektu iterowalnego i zwraca iterator z wynikami. Funkcje lambda doskonale nadają się do użycia z map()
, ponieważ pozwalają na zwięzłe określenie funkcji do przekształcenia elementów.
numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x ** 2, numbers))
print(squared_numbers) # Wynik: [1, 4, 9, 16, 25]
Użycie z filter()
Funkcja filter()
zwraca iterator złożony z elementów obiektu iterowalnego, dla których zadana funkcja zwraca True. Funkcje lambda umożliwiają szybkie określenie warunku do filtrowania.
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # Wynik: [2, 4, 6, 8, 10]
Użycie z sorted()
Funkcja sorted()
sortuje elementy obiektu iterowalnego. Funkcje lambda mogą być używane do określenia własnego kryterium sortowania za pomocą argumentu key
.
words = ["banana", "apple", "cherry", "date"]
sorted_words = sorted(words, key=lambda x: len(x))
print(sorted_words) # Wynik: ['date', 'apple', 'banana', 'cherry']
Funkcje lambda w wyrażeniach
Funkcje lambda można używać wewnątrz innych wyrażeń, takich jak wyrażenia listowe i generatory słowników.
pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
pairs.sort(key=lambda pair: pair[1])
print(pairs) # Wynik: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
2.3 Ograniczenia funkcji lambda
Funkcje lambda mają kilka ograniczeń w porównaniu do zwykłych funkcji:
Ograniczoność wyrażeniami:
Funkcje lambda mogą zawierać tylko jedno wyrażenie i nie mogą zawierać skomplikowanych operatorów, takich jak pętle lub operatory sterujące (na przykład if
, else
itd.).
Brak dokumentacji:
Funkcje lambda nie mogą zawierać ciągu dokumentacyjnego (docstring), co utrudnia dokumentowanie ich funkcji.
Ograniczone możliwości debugowania:
Z powodu braku nazwy i dokumentacji, funkcje lambda są trudniejsze do debugowania w porównaniu do zwykłych funkcji.
Przykład ograniczenia funkcji lambda
Próba użycia kilku wyrażeń wewnątrz funkcji lambda spowoduje błąd składniowy:
# Ten kod spowoduje błąd
invalid_lambda = lambda x: x ** 2; print(x)
GO TO FULL VERSION