Lambda je kratka funkcija sa jednim izrazom.
Oblik lambda argumenti: izraz pravi funkcijski objekat bez def naredbe. Njegov jedan izraz automatski daje rezultat. Lambda je najkorisnija kada je funkcija kratka i prosleđuje se direktno drugoj funkciji.
def double(number):
return number * 2
double_lambda = lambda number: number * 2
print(double(5))
print(double_lambda(5))Oba poziva ispisuju 10. Dodela promenljivoj double_lambda služi samo za poređenje sintakse: za funkciju kojoj dajete ime i koristite je više puta, def je obično jasniji.
10
10Telo lambda funkcije je jedan izraz, a ne niz proizvoljnih naredbi. Funkciju možete proslediti kao vrednost; zagrade kao u function_name() je pozivaju i daju njen rezultat.
Birajte čitljivost: Koristite def kada logika ima više koraka, treba joj smislen naziv ili će se ponovo koristiti. Lambda treba da učini okolni kod lakšim za čitanje, a ne kraćim po svaku cenu.
add = lambda a, b: a + b
print(add(3, 4))
products = [
{"name": "Keyboard", "price": 45},
{"name": "Mouse", "price": 20},
{"name": "Monitor", "price": 180},
]
sorted_products = sorted(products, key=lambda product: product["price"])
for product in sorted_products:
print(product["name"], product["price"])Prvi red pokazuje lambda funkciju sa dva argumenta. U drugom primeru key od lambda funkcije traži cenu svakog proizvoda. sorted() vraća novu listu i ne menja products.
double = lambda number: number * 2
print(double(5))Lambda prima number i vraća njegovu udvostručenu vrednost. Ovo je prikaz sintakse; imenovana funkcija koja se ponovo koristi obično se piše pomoću def.
add = lambda a, b: a + b
print(add(3, 4))Argumenti stoje pre dvotačke. Izraz posle dvotačke je vraćeni rezultat.
sorted_products = sorted(products, key=lambda product: product["price"])sorted() poziva lambda funkciju za svaki proizvod i poredi cene koje dobije. Originalna lista products zadržava svoj redosled.
def discounted_price(product):
price = product["price"]
return price * 0.9Ovde postoji imenovana međuvrednost i više od jednog koraka, zato def jasnije prenosi nameru od složene lambda funkcije.
Čitajte sorted() i lambda izraz od spolja ka unutra
- 1. Počnite od sorted()
sorted(products, ...)prima originalnu listu i vraća novu sortiranu listu. - 2. Uočite key
key=prima funkciju, a ne rezultat njenog poziva. Govori funkcijisorted()koju vrednost treba koristiti za poređenje. - 3. Pratite productZa svaki rečnik u
products,productse privremeno odnosi na taj jedan rečnik. - 4. Pročitajte rezultat lambda izraza
lambda product: product["price"]vraća jednu cenu za svaki proizvod. - 5. Pogledajte konačni redosled
sorted()poredi te cene i pravi novu listu od najniže do najviše, osim ako se koristireverse=True.
Česte greške
- Više naredbi u lambda funkcijiLambda sadrži jedan izraz. Koristite
defkada su vam potrebne dodele vrednosti, više koraka ili jasniji tok upravljanja. - Pozivanje funkcije umesto njenog prosleđivanjaNapišite
key=lambda product: ..., a ne vrednost nastalu pre nego štosorted()može da pregleda svaki proizvod. - Biranje pogrešnog key argumentaVratite
product["price"]za sortiranje po ceni. Vraćanjeproduct["name"]umesto toga sortira abecedno. - Očekivanje da sorted() promeni originalnu listu
sorted()pravi novu listu. Sačuvajte njen rezultat ako želite da koristite novi redosled. - Skrivanje složene logike u lambda funkcijiAko je izraz teško čitati, radije tom poslu dajte smislen naziv pomoću
def.
