SZUKAMY β-testerów Ścieżki Kariery Programisty AI! Zapisz się TU.

Podstawy Pythona – lambda
Znasz to uczucie, gdy chcesz coś policzyć, ale nie chce Ci się pisać całej funkcji z def, docstringiem i nazwą wyrażającą tak wiele, jak neurotyk u psychiarty? W takich sytuacjach przychodzi z pomocą lambda – niby mała rzecz, a cieszy. Ot, taka funkcja dla leniwych.
Dzisiejszy tutek nauczy Cię, czym jest lambda, jak ją pisać, jak jej używać oraz kiedy… lepiej jej nie używać!
Zamiast wstępu
double = lambda x: x ** 2
#wywołanie
print(double(2)) # 4
W tłumaczeniu z Pajtonowego na nasze: double to taka lambda, że x to x *2. Dzięki słowu kluczowemu lambda okazuje się, że nasza zmienna double wcale nie jest zmienną tylko funkcją. I można jej użyć jak funkcji.
Lambdy są fajne, jeśli chcemy wykonać jakąś (dość prostą, a przynajmniej jednolinijkową) operację wykonywać wielokrotnie i nie chcemy robić tego z palca milion razy. Ale żeby nie było, zacznijmy od bardziej oficjalnego przedstawienia:
Co to lambda (grec. λ)?
Funkcja lambda (od greckiej litery λ) w Pythonie, zwana też funkcją anonimową lub wyrażeniem lambda, to mała, jednowierszowa funkcja, którą definiujemy za pomocą słowa kluczowego lambda.
Lambda służy do tworzenia funkcji, która ma tylko jedno wyrażenie, bez potrzeby definiowania jej w tradycyjny sposób za pomocą słowa kluczowego def. To wygodne, bo lambdę można łatwo zdefiniować w miejscu, w którym są używane, bez konieczności dodawania osobnych bloków kodu.
Lambdy często tworzy się, by je stosować jako argument w innych funkcjach, takich jak map(), filter() czy sorted().
list(map(lambda x: x**2, [1, 2, 3])) #[2,4,6]
#tworzy listę poprzez zastosowanie
#funkcji lambda do każdej liczby w liście.
Cechy lambdy
Choć funkcje anonimowe występują w większości (wszystkich?) języków programowania (co tylko potwierdza moją tezę, że programiści to z definicji leniwi ludzie!), to lambdy w Pythonie mają swoje smaczki, o których należy pamiętać.
- Lambdy przyjmują dowolną liczbę argumentów.
- Lambdy mają zwięzłą składnię: lambda + argument(y) + : + wyrażenie.
- Lambdy nie zawierają nawiasów klamrowych.
- Lambdy zawsze zwracają wartość wyrażenia.
- Labdsy nie zawierają słowa kluczowego return
- Labdsy mogą mieć tylko jeden wers.
- Labdsy nie zawierają docstringów.
- Lambdy są „bezimienne”, co może utrudnić debugowanie.
Late binding w Lambdzie
Jedną z cech charakterystycznych Lambdy jest tzw. late binding. Python nie zamraża wartości zmiennej pobieranej przez lambdę. Jeśli zmienisz tę wartość po wywołaniu lambdy, lambda również się zmieni. Na szczęście można to dość łatwo “obejść”.
# ❌ Przykład late-bindingu lambdy:
x = 5
f = lambda: x
x = 10
print(f()) # ➜ 10 (late binding – bierze aktualną wartość)
# ✅ Jak to obejść:
x = 5
f = lambda x=x: x
x = 10
print(f()) # ➜ 5
Dobre praktyki związane z lambdą
W Pythonie czytelność jest najważniejsza. Dlatego warto stosować poniższe zasady zawsze, kiedy mamy do czynienia z lambdą.
Długość lambdy <80
Długa lambda staje się nieczytelna i trudna do debugowania. Gdy logika rośnie, przekształć ją w funkcję def.
# ❌ Nieczytelny przykład:
key=lambda user: user["profile"]["details"]["account"]["settings"]["email_verified"] == True
# ✅ Lepszy sposób:
def is_verified(user):
return user["profile"]["details"]["account"]["settings"] ["email_verified"] == True
sorted(users, key=is_verified)
Unikaj domyślnych argumentów, które są mutowalne
Domyślne listy, słowniki czy zbiory nie są resetowane między wywołaniami funkcji/lambdy — to klasyczna pułapka.
# ❌ Groźna konstrukcja:
lambda x, cache=[]: cache.append(x) # lista współdzielona!
# ✅ Bezpieczny odpowiednik:
def f(x, cache=None):
if cache is None:
cache = []
cache.append(x)
Nadaj lambdzie sensowną nazwę, jeśli chcesz jej później użyć
Jeśli przypisujesz lambdę do zmiennej, nazwa tej zmiennej powinna mówić, co lambda robi.
# ❌ Zbyt ogólnikowo:
f = lambda x: x + 1
# ✅ Czytelniej:
add_one = lambda x: x + 1
Lub jeszcze lepiej (jeśli chcesz testować, typować lub dokumentować):
def add_one(x):
return x + 1
Skomplikowaną lambdę przekształć w klasyczną funkcję
Gdy lambda staje się trudna do zrozumienia — przekształć ją w def. Złożone obliczenia w lambdzie to zły pomysł, ponieważ tracisz na czytelności, testowalności i logice krok po kroku.
# ❌ Tego nikt nie chce czytać:
sorted(users, key=lambda x: x[1] * (x[2] + 1) / x[3] - 10)
# ✅ Przejrzyście i gotowe do debugowania:
def ranking(user):
return user[1] * (user[2] + 1) / user[3] - 10
#wywołanie
sorted(users, key=ranking)
Unikaj lambda x: funkcja(x) – przekaż funkcję wprost
To częsty błąd u początkujących – niepotrzebnie opakowujesz funkcję, która już istnieje i pasuje. Dotyczy to też: int, float, len, reversed, abs, operator.itemgetter, itp.
# ❌ Niepotrzebna lambda:
map(lambda x: str(x), lista)
# ✅ Lepiej i szybciej:
map(str, lista)
Nie dodawaj typowania do lambdy
Choć od Python 3.5 można adnotować typy w lambdzie (np. przez Callable), to w praktyce lepiej i czytelniej napisać funkcję def.
# ❌ Mało wygodne:
from typing import Callable
f: Callable[[int], int] = lambda x: x + 1
# ✅ Czytelne, typowalne, dokumentowalne:
def f(x: int) -> int:
return x + 1
Lambda vs. zwykła funkcja – kiedy co wybrać?
| Kryterium | def | lambda |
| Długość/skomplikowanie | dowolne | jedno krótkie wyrażenie |
| Czytelność & debugowanie | łatwiejsze (nazwa, docstring) | trudniejsze (anonimowe) |
| SEO kodu / dokumentacja | generuje dokumentację, typowanie | brak nazwy → brak docstringa |
| Typowe użycie | logika biznesowa, API, testy | krótkie callbacki, sortowanie |
Podsumowanie
Poznaliśmy już klasyczne funkcje, a teraz wiemy, jak je obejść za pomocą lambd (m-b-d – no tego nie da się wymówić! 😮) W każdym razie, stosuj lambdy do woli. A jeśli Twój kod zacznie szaleć z powodu late-bindingu i mutowalności zmiennych, zawsze możesz przerobić problematyczną lambdę na zwykłą funkcję.
W najbliższym czasie dodamy tu link do colaba z przykładami i zadaniami. Tymczasem wpadaj po kolejny tutek – czas na comprehensions.
Co dalej?
→ Zapisz się do naszego newslettera, żeby nigdy nie przegapić żadnego wartościowego artykułu.
→ Zajrzyj do sekcji Kariera w AI, gdzie znajdziesz konkretne materiały o zmianach na rynku pracy – w Polsce i na świecie – oraz ścieżkach kariery związanych ze sztuczną inteligencją (nie tylko jako programista!).
→ A jeśli chcesz pisać modele i pracować jako Architekt AI, ale nie wiesz, od czego zacząć (lub utknąłeś gdzieś na ścieżce), odwiedź dział Nauka AI – czeka tam wiedza, ciekawostki i realne wsparcie.
! Uwaga
Niniejszy ebook ma charakter informacyjny i edukacyjny. Nie stanowi porady prawnej ani oferty pracy w rozumieniu przepisów krajowych lub unijnych.
Przy tworzeniu niniejszego artykułu korzystano ze wsparcia narzędzi opartych na sztucznej inteligencji – m.in. w zakresie porządkowania treści, analizy źródeł, przyspieszenia redakcji i wyszukiwania źródeł Jednak wszelkie decyzje dotycząca treści, interpretacji i ostatecznej formy zostały podjęte przez człowieka.



