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 aniterator
predmet. V praksi rezultat predstavljamo kot alist
,tuple
,set
,dict
itd., kar je bolj priročno.
,war
Recimo, da želite kvadrirati vsak člen seznama z uporabomap()
funkcijo. Da bi to naredili, bomo definirali asquare()
funkcijo in jo uporabite kot parameter zamap()
:
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**2
def named_square(x): return x**2
print(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.