Funkce Python Lambda jsou anonymní funkce znamená, že funkce je bez názvu. Jak již víme, def klíčové slovo se používá k definování normální funkce v Pythonu. Podobně, lambda klíčové slovo se používá k definování anonymní funkce v Krajta .
Syntaxe funkce Python Lambda
Syntax: argumenty lambda: výraz
- Tato funkce může mít libovolný počet argumentů, ale pouze jeden výraz, který je vyhodnocen a vrácen.
- Je možné volně používat funkce lambda všude tam, kde jsou vyžadovány funkční objekty.
- Musíte mít na paměti, že funkce lambda jsou syntakticky omezeny na jeden výraz.
- Kromě jiných typů výrazů ve funkcích má různá použití v jednotlivých oblastech programování.
Příklad funkce pythonské lambda
V příkladu jsme definovali funkci lambda( horní ) pro převod řetězce na velká písmena pomocí horní() .
Tento kód definuje funkci lambda s názvem upper> který vezme řetězec jako svůj argument a převede jej na velká písmena pomocí upper()> metoda. Poté aplikuje tuto lambda funkci na řetězec ‚techcodeview.com‘ a vytiskne výsledek
Python3
str1>=> 'techcodeview.com'> upper>=> lambda> string: string.upper()> print>(upper(str1))> |
>
>
Výstup:
GEEKSFORGEEKS>
Použití funkce Lambda v Pythonu
Podívejme se na některá praktická použití funkce lambda v Pythonu.
Kontrola stavu pomocí funkce lambda Pythonu
Tady, ‘format_numric’ volá funkci lambda a číslo je předáno jako parametr pro provádění operací.
Python3
format_numeric>=> lambda> num: f>'{num:e}'> if> isinstance>(num,>int>)>else> f>'{num:,.2f}'> print>(>'Int formatting:'>, format_numeric(>1000000>))> print>(>'float formatting:'>, format_numeric(>999999.789541235>))> |
>
>
Výstup:
Int formatting: 1.000000e+06 float formatting: 999,999.79>
Rozdíl mezi lambda funkcemi a def definovanou funkcí
Kód definuje funkci kostky pomocí obou ' def'> klíčové slovo a funkce lambda. Vypočítá třetí mocninu daného čísla (v tomto případě 5) pomocí obou přístupů a výsledky vytiskne. Výstup je 125 pro oba ' def'> a lambda funkce, což dokazuje, že dosahují stejného výpočtu krychle.
Python3
def> cube(y):> >return> y>*>y>*>y> lambda_cube>=> lambda> y: y>*>y>*>y> print>(>'Using function defined with `def` keyword, cube:'>, cube(>5>))> print>(>'Using lambda function, cube:'>, lambda_cube(>5>))> |
>
>
Výstup:
Using function defined with `def` keyword, cube: 125 Using lambda function, cube: 125>
Jak můžeme vidět na výše uvedeném příkladu, oba krychle() funkce a lambda_cube() funkce se chovají stejně a jak bylo zamýšleno. Pojďme analyzovat výše uvedený příklad trochu více:
| S funkcí lambda | Bez funkce lambda |
|---|---|
| Někdy podporuje jednořádkové příkazy, které vracejí nějakou hodnotu. | Podporuje libovolný počet řádků uvnitř funkčního bloku |
| Dobré pro provádění krátkých operací/manipulací s daty. | Dobré pro všechny případy, které vyžadují více řádků kódu. |
| Použití funkce lambda může někdy snížit čitelnost kódu. | Pro snadnou čitelnost můžeme použít komentáře a popisy funkcí. |
Praktické využití funkce lambda v Pythonu
Funkce Python Lambda s porozuměním seznamu
Při každé iteraci uvnitř porozumění seznamu , vytváříme novou funkci lambda s výchozím argumentem x (kde x je aktuální položka v iteraci). Později, uvnitř cyklu for, voláme stejný objekt funkce s výchozím argumentem using položka() a získat požadovanou hodnotu. Tím pádem, is_even_list ukládá seznam objektů funkce lambda.
Python3
is_even_list>=> [>lambda> arg>=>x: arg>*> 10> for> x>in> range>(>1>,>5>)]> for> item>in> is_even_list:> >print>(item())> |
>
>
Výstup:
10 20 30 40>
Funkce Python Lambda s if-else
Zde používáme Max lambda funkce k nalezení maximálně dvou celých čísel.
Python3
Max> => lambda> a, b : a>if>(a>b)>else> b> print>(>Max>(>1>,>2>))> |
>
>
Výstup:
2>
Python Lambda s více příkazy
Lambda funkce neumožňují více příkazů, nicméně můžeme vytvořit dvě lambda funkce a pak volat druhou lambda funkci jako parametr k první funkci. Zkusme najít druhý maximální prvek pomocí lambda.
Kód definuje seznam volaných podseznamů ' List'> . Používá lambda funkce k třídění každého podseznamu a nalezení druhého největšího prvku v každém podseznamu. Výsledkem je seznam druhých největších prvků, který je následně vytištěn. Výstup zobrazí druhý největší prvek z každého dílčího seznamu v původním seznamu.
Python3
List> => [[>2>,>3>,>4>],[>1>,>4>,>16>,>64>],[>3>,>6>,>9>,>12>]]> sortList>=> lambda> x: (>sorted>(i)>for> i>in> x)> secondLargest>=> lambda> x, f : [y[>len>(y)>->2>]>for> y>in> f(x)]> res>=> secondLargest(>List>, sortList)> print>(res)> |
>
>
Výstup:
[3, 16, 9]>
Funkce lambda lze použít spolu s vestavěnými funkcemi, jako je filtr() , mapa() a snížit() .
Použití funkce lambda() s filtrem()
Funkce filter() v Pythonu přebírá funkci a seznam jako argumenty. To nabízí elegantní způsob, jak odfiltrovat všechny prvky sekvence sekvence, pro kterou funkce vrací True. Zde je malý program, který vrací lichá čísla ze seznamu vstupů:
Odfiltrujte všechna lichá čísla pomocí funkce filter() a lambda
Zde lambda x: (x % 2 != 0) vrátí hodnotu True nebo False, pokud x není sudé. Protože filter() uchovává prvky pouze tam, kde produkuje Skutečný , tak odstraní všechna vygenerovaná lichá čísla Nepravdivé .
Python3
li>=> [>5>,>7>,>22>,>97>,>54>,>62>,>77>,>23>,>73>,>61>]> final_list>=> list>(>filter>(>lambda> x: (x>%> 2> !>=> 0>), li))> print>(final_list)> |
>
>
Výstup:
[5, 7, 97, 77, 23, 73, 61]>
Filtrujte všechny osoby starší 18 let pomocí funkce lambda a filter().
Kód filtruje seznam věků a extrahuje věk dospělých (věk nad 18 let) pomocí funkce lambda a ' filter'> funkce. Poté vytiskne seznam dospělých věků. Výstup zobrazuje věk jednotlivců, kteří jsou starší 18 let.
Python3
ages>=> [>13>,>90>,>17>,>59>,>21>,>60>,>5>]> adults>=> list>(>filter>(>lambda> age: age>>18>, ages))> print>(adults)> |
binární strom v Javě
>
>
Výstup:
[90, 59, 21, 60]>
Použití funkce lambda() s map()
Funkce map() v Pythonu přebírá funkci a seznam jako argument. Funkce je volána s funkcí lambda a seznamem a je vrácen nový seznam, který obsahuje všechny položky upravené lambda vrácené touto funkcí pro každou položku. Příklad:
Vynásobte všechny prvky seznamu 2 pomocí funkce lambda a map().
Kód zdvojnásobí každý prvek v seznamu pomocí funkce lambda a ' map'> funkce. Poté vytiskne nový seznam se zdvojenými prvky. Výstup zobrazí každý prvek z původního seznamu vynásobený 2.
Python3
li>=> [>5>,>7>,>22>,>97>,>54>,>62>,>77>,>23>,>73>,>61>]> final_list>=> list>(>map>(>lambda> x: x>*>2>, li))> print>(final_list)> |
>
>
Výstup:
[10, 14, 44, 194, 108, 124, 154, 46, 146, 122]>
Transformujte všechny prvky seznamu na velká písmena pomocí funkce lambda a map().
Kód převede seznam jmen zvířat na velká písmena pomocí funkce lambda a ' map'> funkce. Poté vytiskne seznam se jmény zvířat velkými písmeny. Výstup zobrazuje jména zvířat velkými písmeny.
Python3
animals>=> [>'dog'>,>'cat'>,>'parrot'>,>'rabbit'>]> uppered_animals>=> list>(>map>(>lambda> animal: animal.upper(), animals))> print>(uppered_animals)> |
>
>
Výstup:
['DOG', 'CAT', 'PARROT', 'RABBIT']>
Použití funkce lambda() s redukcí()
The snížit() funkce v Pythonu bere funkci a seznam jako argument. Funkce je volána s funkcí lambda a je vrácen iterovatelný a nový redukovaný výsledek. Tím se provede opakovaná operace nad páry iterovatelných. Funkce redukovat() patří do functools modul.
Součet všech prvků v seznamu pomocí funkce lambda a reduction().
Kód vypočítá součet prvků v seznamu pomocí ' reduce'> funkce z ' functools'> modul. Dováží se ' reduce'> , definuje seznam, aplikuje funkci lambda, která přidává dva prvky najednou, a vytiskne součet všech prvků v seznamu. Výstup zobrazí vypočítaný součet.
Python3
from> functools>import> reduce> li>=> [>5>,>8>,>10>,>20>,>50>,>100>]> sum> => reduce>((>lambda> x, y: x>+> y), li)> print>(>sum>)> |
>
>
Výstup:
193>
Zde jsou výsledky předchozích dvou prvků přidány k dalšímu prvku a to pokračuje až do konce seznamu jako ((((5+8)+10)+20)+50)+100).
Najděte maximální prvek v seznamu pomocí funkce lambda a reduction().
Kód používá ' functools'> modul k nalezení maximálního počtu prvků v seznamu ( ' lis'> ) zaměstnáváním ' reduce'> funkce a funkce lambda. Poté vytiskne maximální prvek, což je v tomto případě 6.
Python3
import> functools> lis>=> [>1>,>3>,>5>,>6>,>2>, ]> print>(>'The maximum element of the list is : '>, end>=>'')> print>(functools.>reduce>(>lambda> a, b: a>if> a>b>else> b, lis))> |
>
>
Výstup:
The maximum element of the list is : 6>