A Lambda-függvények használata Pythonban [With Examples]

Ebben az oktatóanyagban mindent megtudhat a Python lambda-függvényeiről – a szintaxistól a lambda-függvények meghatározásán át a különböző használati esetekig kódpéldákkal.

A Pythonban a lambdák névtelen függvények, amelyek tömör szintaxissal rendelkeznek, és más hasznos beépített függvényekkel együtt használhatók. Ennek az oktatóanyagnak a végére megtanulja, hogyan definiáljon lambda-függvényeket, és mikor érdemes ezeket a szokásos Python-függvényekkel szemben használni.

Kezdjük!

Python Lambda függvény: Szintaxis és példák

Íme az általános szintaxis a lambda függvény definiálásához a Pythonban:

lambda parameter(s):return value

A fenti általános szintaxisban:

  • A lambda az a kulcsszó, amelyet a lambda-függvény definiálásához kell használni, majd egy vagy több paramétert, amelyet a függvénynek fel kell vennie.
  • A paramétereket és a visszatérési értéket kettőspont választja el.

💡 A lambda függvény definiálásakor ügyeljen arra, hogy a visszatérési érték kiszámítása egy olyan kifejezés kiértékelésével történjen, amely egy kódsoron át ível. Ezt jobban megérti, ha példákat kódolunk.

Példák a Python Lambda függvényekre

A lambda-függvények megértésének legjobb módja a szokásos Python-függvények lambda-függvényekké történő átírása.

👩🏽‍💻 Kódolhat Python REPL-ben vagy a etoppc.com online Python szerkesztőjében.

#1. Tekintsük a következő square() függvényt, amely egy számot vesz fel argumentumként, és a szám négyzetét adja vissza.

def square(num):
    return num*num

Meghívhatja a függvényt argumentumokkal, és ellenőrizheti, hogy megfelelően működik-e.

>>> square(9)
81
>>> square(12)
144

Ezt a lambda-kifejezést hozzárendelheti egy változónévhez, például négyzet1-hez, hogy tömörebb legyen a függvénydefiníció: square1 = lambda num: num*num, majd meghívja a square1 függvényt tetszőleges számmal argumentumként. Tudjuk azonban, hogy a lambdák névtelen függvények, ezért kerülje el, hogy változóhoz rendelje őket.

A square() függvény paramétere num, a visszatérési érték pedig num*num. Miután azonosítottuk ezeket, beilleszthetjük őket a lambda kifejezésbe, és egy argumentummal hívhatjuk meg, amint látható:

>>> (lambda num: num*num)(2)
4

Ez az azonnal meghívott függvénykifejezés fogalma, ahol egy függvényt közvetlenül a definiálás után hívunk meg.

#2. Ezután írjunk át egy másik egyszerű add() függvényt, amely szám1 és szam2 számokat vesz fel, és ezek összegét adja vissza, a szám1 + szam2.

def add(num1,num2):
    return num1 + num2

Nevezzük meg az add() függvényt két számmal argumentumként:

>>> add(4,3)
7
>>> add(12,5)
17
>>> add(12,6)
18

Ebben az esetben num1 és num2 a két paraméter, és a visszatérési érték num1 + num2.

>>> (lambda num1, num2: num1 + num2)(3,7)
10

A Python-függvények a paraméterek alapértelmezett értékeit is felvehetik. Módosítsuk az add() függvény definícióját, és állítsuk a num2 paraméter alapértelmezett értékét 10-re.

def add(num1, num2=10):
    return num1 + num2

A következő függvényhívásokban:

  • Az első függvényhívásban a num1 értéke 1, a num2 értéke pedig 3. Amikor a függvényhívásban megadja a num2 értékét, ez az érték kerül felhasználásra; a függvény 4-et ad vissza.
  • Ha azonban csak egy argumentumot ad meg (a szám1 értéke 7), akkor a 10-es alapértelmezett értéket használja a 2. szám; a függvény 17-et ad vissza.
>>> add(1,3)
4
>>> add(7)
17

Amikor olyan függvényeket írunk, amelyek bizonyos paraméterekhez alapértelmezett értéket vesznek fel lambda-kifejezésként, a paraméterek meghatározásakor megadhatja az alapértelmezett értéket.

>>> (lambda num1, num2 = 10: num1 + num2)(1)
11

Mikor érdemes Lambda függvényeket használni a Pythonban?

Most, hogy megtanulta a lambda függvények alapjait a Pythonban, íme néhány használati eset:

  • Ha van egy függvénye, amelynek visszatérési kifejezése egyetlen kódsor, és nem kell hivatkoznia a függvényre ugyanabban a modulban máshol, akkor lambda függvényeket használhat. Ennek megértéséhez néhány példát is kódoltunk.
  • A lambda függvényeket beépített függvények használatakor használhatja, mint például a map(), a filter() és a redukció().
  • A lambda függvények hasznosak lehetnek a Python adatstruktúrák, például listák és szótárak rendezésében.
  A tavaszi alkotók frissítésének beszerzése

A Python Lambda használata beépített funkciókkal

1. A Lambda használata a map()

A map() függvény felvesz egy iterálható és egy függvényt, és alkalmazza a függvényt az iterálható minden egyes elemére, az ábrán látható módon:

Hozzunk létre egy számlistát, és a map() függvény segítségével hozzunk létre egy új listát, amely tartalmazza a számlistában szereplő egyes számok négyzetét. Figyelje meg a lambda függvény használatát a négyzetesítési művelet meghatározásához.

>>> nums = [4,5,6,9]
>>> list(map(lambda num:num*num,nums))
[16, 25, 36, 81]

Mivel a map() függvény egy térképobjektumot ad vissza, azt egy listába kell önteni.

▶️ Tekintse meg ezt az oktatóanyagot a Python térkép() funkcióján.

2. Lambda használata filter()

Határozzuk meg a számokat, egy számlistát:

>>> nums = [4,5,6,9]

Tegyük fel, hogy szűrni szeretné ezt a listát, és csak a páratlan számokat szeretné megtartani.

Használhatja a Python beépített filter() függvényét.

A filter() függvény felvesz egy feltételt és egy iterálhatót: filter(condition, iterable). Az eredmény csak azokat az elemeket tartalmazza az eredeti iterálhatóságban, amelyek teljesítik a feltételt. A visszaadott objektumot egy Python iterálható elembe, például listába öntheti.

  A Safari böngészési adatainak törlése billentyűparancs segítségével

Az összes páros szám kiszűréséhez csak a páratlan számokat tartjuk meg. Tehát a lambda kifejezés legyen lambda num: num%2!=0. A num%2 mennyiség a maradék, ha a számot elosztjuk 2-vel.

  • num%2!=0 igaz, ha a szám páratlan, és
  • num%2!=0 hamis, ha a szám páros.
>>> nums = [4,5,6,9]
>>> list(filter(lambda num:num%2!=0,nums))
[5, 9]

3. A Lambda használata a redukcióval ()

A redukció() függvény egy iterálható és egy függvényt vesz fel. Csökkenti az iterálható mennyiséget azáltal, hogy a függvényt iteratívan alkalmazza az iterálható elemeire.

A Reduction() függvény használatához importálnia kell a Python beépített functools moduljából:

>>> from functools import reduce

Használjuk a Reduction() függvényt a számlistában szereplő összes szám összegének kiszámításához. A redukáló összeg függvényként egy lambda kifejezést definiálunk: lambda szám1,szám2:szám1+szám2.

A redukciós művelet a következőképpen történik: f(f(f(4,5),6),9) = f(f(9,6),9) = f(15,9) = 24. Itt f a lista két elemének összegző művelete, amelyet a lambda függvény határoz meg.

>>> from functools import reduce
>>> nums = [4,5,6,9]
>>> reduce(lambda num1,num2:num1+num2,nums)
24

Python Lambda-függvények a rendezés testreszabásához

A lambda-függvények beépített Python-függvényekkel, például map(), filter() és redukciós(-) használata mellett a beépített függvények és rendezési módszerek testreszabására is használhatók.

1. Python-listák rendezése

Amikor Python-listákkal dolgozik, gyakran bizonyos rendezési feltételek alapján kell rendeznie azokat. A Python-listák helyükre rendezéséhez használhatja a beépített sort() metódust. Ha szüksége van a lista rendezett másolatára, használhatja a sorted() függvényt.

A Python sorted() függvényének szintaxisa rendezett(iterálható, kulcs=…,fordított=igaz |hamis).

– A kulcsparaméter a rendezés testreszabására szolgál.
– A fordított paraméter igaz vagy hamis értékre állítható; az alapértelmezett érték False.

A számok és karakterláncok listáinak rendezésekor az alapértelmezett rendezés növekvő, illetve ábécé sorrendben történik. Előfordulhat azonban, hogy néha meg kíván határozni néhány egyéni rendezési kritériumot.

Vegye figyelembe a következő gyümölcslistát. Tegyük fel, hogy szeretné megszerezni a lista rendezett példányát. A karakterláncokat aszerint kell rendezni, hogy hány ‘p’ fordul elő bennük – csökkenő sorrendben.

>>> fruits = ['apple','pineapple','grapes','mango']

Ideje használni az opcionális kulcsparamétert. A karakterlánc egy iterálható Pythonban, és a benne lévő karakterek előfordulási számának meghatározásához használhatja a beépített .count() metódust. Tehát a kulcsot lambda x:x.count(‘p’) értékre állítottuk be, hogy a rendezés azon alapuljon, hogy hányszor fordul elő ‘p’ a karakterláncban.

>>> fruits = ['apple','pineapple','grapes','mango']
>>> sorted(fruits,key=lambda x:x.count('p'),reverse=True)
['pineapple', 'apple', 'grapes', 'mango']

Ebben a példában:

  • A rendezés kulcsa a „p” karakter előfordulásának száma, és ez lambda-kifejezésként van definiálva.
  • Mivel a fordított paramétert True-ra állítottuk, a rendezés a „p” előfordulásai számának csökkenő sorrendjében történik.
  Számítsa ki szívbetegségének kockázatát a KnowYour4 segítségével

A gyümölcslistában az „ananász” 3 „p” előfordulását tartalmazza, az „alma”, „szőlő” és „mangó” karakterláncok pedig 2, 1 és 0 „p” előfordulását tartalmazzák.

A stabil rendezés megértése

Vegyünk egy másik példát. Ugyanerre a rendezési kritériumra újradefiniáltuk a gyümölcslistát. Itt a „p” kétszer, illetve egyszer fordul elő az „alma” és „szőlő” karakterláncokban. És soha nem fordul elő a „mangó” és a „dinnye” karakterláncokban.

>>> fruits = ['mango','apple','melon','grapes']
>>> sorted(fruits,key=lambda x:x.count('p'),reverse=True)
['apple', 'grapes', 'mango', 'melon']

A kimeneti listában a „mango” a „dinnye” elé kerül, bár mindkettőben nincs „p” karakter. De miért van ez így? A sorted() függvény stabil rendezést hajt végre; így ha a „p” száma egyenlő két karakterlánc esetén, az elemek sorrendje az eredeti gyümölcslistában megmarad.

Gyors gyakorlatként cserélje fel a „mangó” és a „dinnye” pozícióját a gyümölcslistában, rendezze a listát ugyanazon szempont alapján, és figyelje meg a kimenetet.

▶️ További információ a Python-listák rendezéséről.

2. Python szótár rendezése

A lambdákat a Python szótárak rendezésekor is használhatja. Tekintsük a következő szótárt price_dict, amely tartalmazza a tételeket és azok árait.

>>> price_dict = {
... 'Milk':10,
... 'Honey':15,
... 'Bread':7,
... 'Candy':3
... }

Ha egy szótár kulcs-érték párjait sorok listájaként szeretné megkapni, használja a beépített szótármódszert, az .items():

>>> price_dict_items = price_dict.items()
dict_items([('Milk', 10), ('Honey', 15), ('Bread', 7), ('Candy', 3)])

A Pythonban az összes iterálható elem: listák, sorok, karakterláncok és egyebek a nulla indexelést követik. Tehát az első elem a 0 indexnél, a második az 1 indexnél van, és így tovább.

Szeretnénk az érték szerint rendezni, ami a szótárban szereplő egyes tételek ára. A price_dict_items lista minden sorában az 1. indexű tétel az ár. Tehát a kulcsot lambda x:x-re állítottuk[1] mivel a szótár rendezéséhez az 1. indexű tételt, az árat fogja használni.

>>> dict(sorted(price_dict_items,key=lambda x:x[1]))
{'Candy': 3, 'Bread': 7, 'Milk': 10, 'Honey': 15}

A kimenetben a szótári tételek az árak növekvő sorrendjében vannak rendezve: „Candy”-val kezdődően, 3 egység árú „Méz”-ig, ára 15 egység.

▶️ További információért tekintse meg ezt a részletes útmutatót a Python-szótár kulcs és érték szerinti rendezéséről.

Összegezve

És megvan! Megtanulta, hogyan definiálhat lambda-függvényeket, és hogyan használhatja azokat hatékonyan más beépített Python-függvényekkel. Íme egy összefoglaló a legfontosabb tudnivalókról:

  • A Pythonban a lambda névtelen függvények, amelyek több argumentumot is felvehetnek, és értéket adnak vissza; a visszatérési érték létrehozásához kiértékelendő kifejezésnek egy kódsornak kell lennie. Használhatók a kis függvénydefiníciók tömörebbé tételére.
  • A lambda függvény meghatározásához használhatja a következő szintaxist: lambda paraméter(ek): visszatérési érték.
  • A fontos felhasználási esetek közé tartozik a map(), filter() és redukció() függvényekkel való használatuk, valamint a Python iterables rendezése testreszabásának kulcsparamétere.

Ezután tanulja meg, hogyan hajthat végre padlóosztást Pythonban.