Jak používat funkce Lambda v Pythonu [With Examples]

V tomto tutoriálu se dozvíte vše o funkcích lambda v Pythonu – od syntaxe k definování funkcí lambda až po různé případy použití s ​​příklady kódu.

V Pythonu jsou lambdy anonymní funkce, které mají stručnou syntaxi a lze je použít s dalšími užitečnými vestavěnými funkcemi. Na konci tohoto tutoriálu se naučíte, jak definovat funkce lambda a kdy byste měli zvážit jejich použití oproti běžným funkcím Pythonu.

Pojďme začít!

Funkce Python Lambda: Syntaxe a příklady

Zde je obecná syntaxe pro definování funkce lambda v Pythonu:

lambda parameter(s):return value

Ve výše uvedené obecné syntaxi:

  • lambda je klíčové slovo, které byste měli použít k definování funkce lambda, za nímž následuje jeden nebo více parametrů, které by funkce měla převzít.
  • Parametry a návratovou hodnotu odděluje dvojtečka.

💡 Při definování funkce lambda byste měli zajistit, aby se návratová hodnota vypočítávala vyhodnocením výrazu, který zahrnuje jeden řádek kódu. To lépe pochopíte, když budeme kódovat příklady.

Příklady lambda funkcí v Pythonu

Nejlepší způsob, jak porozumět funkcím lambda, je začít přepsáním běžných funkcí Pythonu na funkce lambda.

👩🏽‍💻 Můžete spolu kódovat v Python REPL nebo v online Python editoru etechblog.cz.

#1. Zvažte následující funkci square(), která jako argument přijímá číslo num a vrací druhou mocninu čísla.

def square(num):
    return num*num

Funkci můžete zavolat s argumenty a ověřit, že funguje správně.

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

Tento výraz lambda můžete přiřadit názvu proměnné, řekněme square1, aby byla definice funkce stručnější: square1 = lambda num: num*num a pak zavolejte funkci square1 s libovolným číslem jako argumentem. Víme však, že lambdy jsou anonymní funkce, takže byste se měli vyhnout jejich přiřazení k proměnné.

Pro funkci square() je parametr num a návratová hodnota je num*num. Poté, co je identifikujeme, můžeme je zapojit do výrazu lambda a zavolat jej argumentem, jak je znázorněno:

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

Jedná se o koncept Immediately Invoked Function Expression, kdy funkci voláme hned po jejím definování.

  Vícevrstvé SSD: Co jsou SLC, MLC, TLC, QLC a PLC?

#2. Dále přepišme další jednoduchou funkci add(), která vezme do čísel, num1 a num2, a vrátí jejich součet, num1 + num2.

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

Zavolejte funkci add() se dvěma čísly jako argumenty:

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

V tomto případě jsou num1 a num2 dva parametry a návratová hodnota je num1 + num2.

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

Funkce Pythonu mohou také nabývat výchozích hodnot parametrů. Upravme definici funkce add() a nastavíme výchozí hodnotu parametru num2 na 10.

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

V následujících voláních funkcí:

  • V prvním volání funkce je hodnota num1 1 a hodnota num2 je 3. Když předáte hodnotu pro num2 ve volání funkce, použije se tato hodnota; funkce vrátí 4.
  • Pokud však zadáte pouze jeden argument (num1 je 7), použije se pro num2 výchozí hodnota 10; funkce vrátí 17.
>>> add(1,3)
4
>>> add(7)
17

Při psaní funkcí, které přebírají výchozí hodnoty pro určité parametry jako výrazy lambda, můžete při definování parametrů zadat výchozí hodnotu.

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

Kdy byste měli používat funkce Lambda v Pythonu?

Nyní, když jste se naučili základy funkcí lambda v Pythonu, zde je několik případů použití:

  • Pokud máte funkci, jejíž návratový výraz je jeden řádek kódu a nepotřebujete odkazovat na funkci jinde ve stejném modulu, můžete použít funkce lambda. Abychom to pochopili, zakódovali jsme také několik příkladů.
  • Funkce lambda můžete použít při používání vestavěných funkcí, jako je map(), filter() a reduction().
  • Funkce lambda mohou být užitečné při třídění datových struktur Pythonu, jako jsou seznamy a slovníky.

Jak používat Python Lambda s vestavěnými funkcemi

1. Použití Lambda s map()

Funkce map() přijímá iterovatelnou a funkci a aplikuje funkci na každou položku v iterovatelné, jak je znázorněno:

Vytvořme seznam čísel a pomocí funkce map() vytvořte nový seznam, který obsahuje druhou mocninu každého čísla v seznamu čísel. Všimněte si použití funkce lambda k definování operace kvadratury.

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

Protože funkce map() vrací objekt mapy, měli bychom jej přetypovat do seznamu.

▶️ Podívejte se na tento tutoriál o funkci map() v Pythonu.

2. Použití Lambda s filtrem()

Pojďme definovat nums, seznam čísel:

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

Předpokládejme, že chcete tento seznam filtrovat a zachovat pouze lichá čísla.

Můžete použít vestavěnou funkci filter() Pythonu.

Funkce filter() přijímá podmínku a iterovatelnou: filter(condition, iterable). Výsledek obsahuje pouze prvky v původní iterovatelnosti, které splňují podmínku. Vrácený objekt můžete přetypovat do iterovatelného Pythonu, jako je seznam.

  Nelze připojit ovladač Xbox 360 k počítači? Zde je to, co byste měli udělat

Abychom odfiltrovali všechna sudá čísla, ponecháme pouze lichá čísla. Takže výraz lambda by měl být lambda num: num%2!=0. Množství num%2 je zbytek, když je num děleno 2.

  • num%2!=0 je True, kdykoli je num liché a
  • num%2!=0 je False, kdykoli je num sudé.
>>> nums = [4,5,6,9]
>>> list(filter(lambda num:num%2!=0,nums))
[5, 9]

3. Použití lambdy s funkcí reduction()

Funkce reduction() přebírá iterovatelnou a funkci. Zmenšuje iterovatelnost tím, že funkci iterativně aplikuje na položky iterovatelné.

Chcete-li použít funkci reduction(), budete ji muset importovat z vestavěného modulu functools Pythonu:

>>> from functools import reduce

Použijme funkci reduction() k výpočtu součtu všech čísel v seznamu nums. Definujeme výraz lambda: lambda num1,num2:num1+num2 jako funkci redukujícího součtu.

Redukce bude probíhat takto: f(f(f(4,5),6),9) = f(f(9,6),9) = f(15,9) = 24. Zde f je operace sečtení dvou položek seznamu definovaných funkcí lambda.

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

Funkce Python Lambda pro přizpůsobení řazení

Kromě použití funkcí lambda s vestavěnými funkcemi Pythonu, jako je map(), filter() a reduction(), je můžete také použít k přizpůsobení vestavěných funkcí a metod používaných pro třídění.

1. Třídění seznamů Python

Při práci s Pythonovými seznamy je často budete muset třídit na základě určitých třídicích kritérií. Chcete-li seznamy Pythonu třídit na místě, můžete na nich použít vestavěnou metodu sort(). Pokud potřebujete seřazenou kopii seznamu, můžete použít funkci sort() .

Syntaxe pro použití funkce sort() Pythonu je sorted(iterovatelné, key=…,reverse= True | False).

– Klíčový parametr se používá k přizpůsobení řazení.
– Reverzní parametr lze nastavit na True nebo False; výchozí hodnota je False.

Při řazení seznamů čísel a řetězců je výchozí řazení ve vzestupném a abecedním pořadí. Někdy však můžete chtít definovat nějaké vlastní kritérium pro řazení.

Zvažte následující seznam ovoce. Předpokládejme, že chcete získat seřazenou kopii seznamu. Řetězce byste měli seřadit podle počtu výskytů ‚p‘ v nich – v sestupném pořadí.

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

Je čas použít volitelný klíčový parametr. Řetězec je v Pythonu iterovatelný a k získání počtu výskytů znaku v něm můžete použít vestavěnou metodu .count(). Nastavíme tedy klíč na lambda x:x.count(‚p‘), takže řazení je založeno na tom, kolikrát se v řetězci vyskytuje ‚p‘.

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

V tomto příkladu:

  • Klíčem k řazení je počet výskytů znaku ‚p‘ a je definován jako výraz lambda.
  • Protože jsme parametr reverse nastavili na hodnotu True, řazení probíhá v sestupném pořadí podle počtu výskytů ‚p‘.
  Co byste měli vědět o Google Topics API

V seznamu ovoce obsahuje ‚ananas‘ 3 výskyty ‚p‘ a řetězce ‚jablko‘, ‚hrozny‘ a ‚mango‘ obsahují 2, 1 a 0 výskytů ‚p‘.

Pochopení stabilního řazení

Zvažte jiný příklad. Pro stejné kritérium řazení jsme předefinovali seznam ovoce. Zde se „p“ vyskytuje v řetězcích „jablko“ a „hrozny“ dvakrát a jednou. A nikdy se nevyskytuje v řetězcích „mango“ a „meloun“.

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

Ve výstupním seznamu je „mango“ před „melounem“, i když oba nemají znak „p“. Ale proč tomu tak je? Funkce sort() provádí stabilní řazení; takže když je počet ‚p‘ stejný pro dva řetězce, pořadí prvků v původním seznamu ovoce je zachováno.

Jako rychlé cvičení vyměňte pozice ‚mango‘ a ‚meloun‘ v seznamu ovoce, seřaďte seznam podle stejného kritéria a sledujte výstup.

▶️ Zjistěte více o řazení seznamů Python.

2. Třídění slovníku Python

Lambdy můžete také použít při třídění slovníků Pythonu. Zvažte následující slovník price_dict, který obsahuje položky a jejich ceny.

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

Chcete-li získat páry klíč–hodnota slovníku jako seznam n-tic, můžete použít vestavěnou slovníkovou metodu .items():

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

V Pythonu se všechny iterovatelné: seznamy, n-tice, řetězce a další řídí nulovým indexováním. Takže první položka je na indexu 0, druhá položka je na indexu 1 a tak dále.

Rádi bychom třídili podle hodnoty, což je cena každé položky ve slovníku. V každé n-tici v seznamu price_dict_items je položka na indexu 1 cenou. Nastavíme tedy klíč na lambda x:x[1] protože k řazení slovníku použije položku na indexu 1, tedy cenu.

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

Ve výstupu byly položky slovníku seřazeny vzestupně podle cen: počínaje „Candy“ s cenou 3 jednotky až po „Honey“ s cenou 15 jednotek.

▶️ Chcete-li se dozvědět více, podívejte se na tohoto podrobného průvodce řazením slovníku Pythonu podle klíče a hodnoty.

Shrnutí

A tady to máte! Naučili jste se, jak definovat funkce lambda a efektivně je používat s dalšími vestavěnými funkcemi Pythonu. Zde je souhrn nejdůležitějších poznatků:

  • V Pythonu jsou lambdy anonymní funkce, které mohou převzít více argumentů a vrátit hodnotu; výraz, který má být vyhodnocen za účelem vygenerování této návratové hodnoty, by měl být jeden řádek kódu. Mohou být použity k tomu, aby byly definice malých funkcí stručnější.
  • Chcete-li definovat funkci Lambda, můžete použít syntaxi: parametr(y) lambda: návratová hodnota.
  • Některé z důležitých případů použití zahrnují jejich použití s ​​funkcemi map(), filter() a reduction() a jako klíčový parametr pro přizpůsobení řazení iterovatelných položek Pythonu.

Dále se naučte, jak provést rozdělení podlahy v Pythonu.