Lambda funkcije v Pythonu

Kaj so lambda funkcije?

​,war
V Pythonu so funkcije objekti: lahko jih dodelimo spremenljivkam, lahko jih vrnemo iz drugih funkcij, shranimo na sezname ali diktate in posredujemo kot parametre za druge funkcije. Upoštevajte, na primer, map() vgrajeno funkcijo. Njegova sintaksa je map(function, iterable) in se uporablja za ročno nanašanje function na vsak element iterable.

map() dejansko vrne an iterator predmet. V praksi rezultat predstavljamo kot a list, tuple, set, dictitd., kar je bolj priročno.
​,war
Recimo, da želite kvadrirati vsak člen seznama z uporabo map() funkcijo. Da bi to naredili, bomo definirali a square() funkcijo in jo uporabite kot parameter za map():

my_list = [1,2,3,4,5]
def square(x):
    return x**2

my_modified_list = list(map(square, my_list))
print(my_modified_list)
[1, 4, 9, 16, 25]

​,war
Vendar, če je edina uporaba našega square() funkcija je ustvariti ta seznam, čistejše je uporabiti a lambda funkcija:

my_list = [1,2,3,4,5]
my_modified_list = list(map(lambda x: x**2, my_list))
print(my_modified_list)
[1, 4, 9, 16, 25]

V Pythonu, lambda funkcije so anonimne funkcije, ki prevzamejo svoje ime in sintakso od Alonza Churcha Lambda račun. Njihova sintaksa je:

lambda x_1,..., x_n : expression(x_1, ..., x_n)

To ustvari anonimno funkcijo, ki kot vhod sprejme spremenljivke x_1, ..., x_n in vrne ocenjeno expression(x_1, ..., x_n).
​,war
Namen lambda functions je treba uporabiti kot parameter za funkcije, ki sprejemajo funkcije kot parameter, kot smo storili z map() nad. Python vam omogoča, da dodelite a lambda funkcijo na spremenljivko, vendar Vodnik po slogu PEP 8 odsvetuje. Če želite spremenljivki dodeliti preprosto funkcijo, je bolje, da to naredite kot enovrstično definicijo. To zagotavlja, da je nastali objekt pravilno poimenovan, kar izboljša berljivost sledenja:

anonymous_square = lambda x : x**2def named_square(x): return x**2print(anonymous_square.__name__)
print(named_square.__name__)


a = anonymous_square
b = named_square
print(a.__name__)
print(b.__name__)

Zakaj uporabljati lambda funkcije?

Po zadnjem odstavku se morda sprašujete, zakaj bi želeli uporabiti a lambda funkcijo. Konec koncev, vse, kar je mogoče narediti z a lambda funkcijo je mogoče izvesti z imenovano funkcijo.
​,war
Odgovor na to je ta lambda funkcije Namen je živeti znotraj večjih izrazov, ki predstavljajo izračun. Eden od načinov razmišljanja o tem je analogija s spremenljivkami in vrednostmi. Razmislite o naslednji kodi:

x = 2

Spremenljivka x je ograda (ali ime) za celo število 2. Na primer klicanje print(x) in print(2) daje popolnoma enak rezultat. V primeru funkcij:

def square(x): return x**2

funkcija square() je ograda za izračun kvadriranja števila. Ta izračun lahko brezimno zapišemo kot lambda x: x**2.
​,war
Po tej filozofski digresiji si oglejmo nekaj primerov aplikacij za lambda funkcije.
​,war

Uporaba Lambda s funkcijo sorted().

O sorted() funkcija razvrsti iterable. Funkcijo sprejme kot svojo key argument, rezultat funkcije, ki se uporablja za vsak element iterable, pa se uporabi za razvrščanje elementov.
​,war
To je popolnoma primerno za a lambda funkcija: z nastavitvijo key parameter z a lambda funkcijo, lahko razvrstimo po katerem koli atributu elementov. Seznam imen lahko na primer razvrstimo po priimku:

name_list = ['Grace Hopper', 'Ada Lovelace', 'Emmy Noether', 'Marie Curie']
​
sorted_by_surname = sorted(name_list, key = lambda x: x.split()[1])
​
print(sorted_by_surname)
['Marie Curie', 'Grace Hopper', 'Ada Lovelace', 'Emmy Noether']

Uporaba Lambda s funkcijo 'filter()'

O filter() funkcija ima naslednjo sintakso: filter(function, iterable) in izpiše elemente iterable ki ocenjujejo function(element) kot res (podobno je an WHERE klavzula v SQL). Lahko uporabimo lambda deluje kot parameter za filter() za izbiro elementov iz ponovljivega.

Razmislite o naslednjem primeru:

num_list = list(range(0,100))
​
multiples_of_15= filter(lambda x: (x % 3 == 0) and (x % 5 == 0), num_list)
​
print(list(multiples_of_15))
[0, 15, 30, 45, 60, 75, 90]

filter() se uporablja lambda funkcija lambda x: (x % 3 == 0) and (x % 5 == 0) vsakemu elementu range(0,100), in vrne a filter predmet. Do elementov dostopamo tako, da jih ulijemo kot list.
​,war

Uporaba Lambde s funkcijo map().

​,war
Naš zadnji primer je nekaj, kar smo videli v uvodu – the map() funkcijo. The map() sintaksa funkcije je: map(function, iterable)in map() velja function vsakemu elementu iterable, vrnitev a map predmet, do katerega je mogoče dostopati z ulivanjem v a list.

Videli smo, kako je to mogoče uporabiti za sezname, vendar bi se lahko uporabilo za dicts z uporabo dict.items() metoda:

my_data = {'Mary':1, 'Alice':2, 'Bob':0}
map_obj = map(lambda x: f'{x[0]} had {x[1]} little lamb', my_data.items())
print(', '.join((map_obj)))
Mary had 1 little lamb, Alice had 2 little lamb, Bob had 0 little lamb

ali na niz:

my_string = 'abcdefg'
''.join(map(lambda x: chr(ord(x)+2),my_string))
'cdefghi'

Oglejte si naš praktični, praktični vodnik za učenje Gita z najboljšimi praksami, standardi, sprejetimi v panogi, in priloženo goljufijo. Nehajte Googlati ukaze Git in pravzaprav naučiti it!

Lahko uporabimo map() funkcijo na domiselne načine – en primer je uporaba več funkcij za isti vnos.

Recimo, da izdelujete API, ki prejme besedilni niz, in želite zanj uporabiti seznam funkcij.

Vsaka funkcija iz besedila izvleče neko značilnost. Lastnosti, ki jih želimo izluščiti, so število besed, druga beseda in četrta črka četrte besede:

def number_of_words(text):
  return len(text.split())
​
def second_word(text):
  return text.split()[1]
​
def fourth_letter_of_fourth_word(text):
  return text.split()[3][3]
​
function_list = [number_of_words, second_word, fourth_letter_of_fourth_word]
​
my_text = 'Mary had a little lamb'
map_obj = map(lambda f: f(my_text), function_list)
​
feature_list = list(map_obj)
​
print(feature_list)
[5, 'had', 't']

​,war

zaključek

​,war
V tem priročniku smo raziskali funkcionalnost lambda funkcije v Pythonu. To smo že videli lambda funkcije so anonimne funkcije, ki se uporabljajo kot vgrajeni funkcijski parameter za druge funkcije. Videli smo nekaj primerov uporabe in kdaj jih ne smemo uporabljati.
​,war
Pri programiranju je pomembno imeti v mislih citat Donalda Knutha: »Programi so namenjeni branju s strani ljudi in le občasno za izvajanje računalnikov.« S tem v mislih lambda funkcije so uporabno orodje za poenostavitev naše kode, vendar jih je treba uporabljati pametno.

Časovni žig:

Več od Stackabuse