Funkce Python Lambda
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)> |
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