Lambda kifejezések a Pythonban

Lambda kifejezések

A lambda kifejezéseket ideális esetben akkor használjuk, amikor valami egyszerű dolgot kell elvégeznünk, és jobban érdekel minket a munka gyors elvégzése, nem pedig a funkció hivatalos megnevezése. A lambda kifejezéseket névtelen függvényekként is ismerik.

A Python Lambda kifejezései rövid utat jelentenek a kicsi és anonim függvények deklarálásához (nem szükséges megadni a lambda függvények nevét).

A lambda függvények ugyanúgy viselkednek, mint a defkulcsszóval deklarált reguláris függvények . Jól jönnek, ha egy kis funkciót szeretne tömören meghatározni. Csak egy kifejezést tartalmazhatnak, ezért nem a legalkalmasabbak a vezérlő-folyamat utasításokat tartalmazó funkciókhoz.

A lambda függvény szintaxisa

lambda arguments: expression

A Lambda függvényeknek tetszőleges számú argumentuma lehet, de csak egy kifejezésük.

Példakód

# Lambda function to calculate square of a number square = lambda x: x ** 2 print(square(3)) # Output: 9 # Traditional function to calculate square of a number def square1(num): return num ** 2 print(square(5)) # Output: 25

A fenti lambda példában lambda x: x ** 2egy névtelen függvényobjektumot kapunk, amely bármilyen névhez társítható. Tehát a függvényobjektumhoz társítottuk square. Tehát innentől kezdve úgy hívhatjuk az squareobjektumot, mint bármelyik hagyományos függvénytsquare(10)

Példák a lambda funkciókra

Kezdő

lambda_func = lambda x: x**2 # Function that takes an integer and returns its square lambda_func(3) # Returns 9

Közbülső

lambda_func = lambda x: True if x**2 >= 10 else False lambda_func(3) # Returns False lambda_func(4) # Returns True

Összetett

my_dict = {"A": 1, "B": 2, "C": 3} sorted(my_dict, key=lambda x: my_dict[x]%3) # Returns ['C', 'A', 'B']

Felhasználási eset

Tegyük fel, hogy a páratlan számokat ki akarja szűrni az a-ból list. Használhat egy forhurkot:

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] filtered = [] for num in my_list: if num % 2 != 0: filtered.append(num) print(filtered) # Python 2: print filtered # [1, 3, 5, 7, 9]

Vagy írhatná ezt egy egyenesként, felsorolás-megértéssel:

filtered = [x for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] if x % 2 != 0]

De előfordulhat, hogy megkísérli a beépített filterfunkció használatát. Miért? Az első példa kissé túl bőbeszédű, és az egyvonalas bélés nehezebben érthető. De filtermindkét szó legjobbját kínálja. Sőt, a beépített funkciók általában gyorsabbak.

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] filtered = filter(lambda x: x % 2 != 0, my_list) list(filtered) # [1, 3, 5, 7, 9]

MEGJEGYZÉS: A Python 3 beépített függvényei generátor objektumokat adnak vissza, ezért hívnod kell list. A Python 2-ben viszont egy list, tuplevagy string.

Szóval mi történt? Azt mondtad filter, hogy minden elemet vegyél be, my_listés alkalmazd a lambda kifejezéseket. A visszatérő értékeket Falsekiszűrjük.

Több információ:

  • Hivatalos dokumentumok