Mis on lambda funktsioonid?
Pythonis on funktsioonid objektid: neid saab määrata muutujatele, neid saab tagastada teistest funktsioonidest, salvestada loenditesse või diktaatidesse ja edastada teiste funktsioonide parameetritena. Mõelge näiteks map()
sisseehitatud funktsioon. Selle süntaks on map(function, iterable)
ja seda kasutatakse käepäraseks pealekandmiseks function
igale elemendile iterable
.
map()
tegelikult tagastab aniterator
objektiks. Praktikas valasime tulemuseks alist
,tuple
,set
,dict
jne, olenevalt sellest, kumb on mugavam.
Oletame, et soovite loendi iga termini ruudustamiseks kasutadamap()
function. In order to do that, we’ll define asquare()
funktsiooni ja kasutage seda parameetrinamap()
:
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]
Kui aga meie ainsaks kasutamiseks square()
funktsioon on selle loendi loomine, on puhtam kasutada a lambda
funktsioon:
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]
Pythonis, lambda
functions are anonymous functions that take their name and syntax from Alonzo Church’s Lambda arvutus. Nende süntaks on:
lambda x_1,..., x_n : expression(x_1, ..., x_n)
See loob anonüümse funktsiooni, mis saab muutujad sisendiks x_1, ..., x_n
ja tagastab hinnatud expression(x_1, ..., x_n)
.
Eesmärgil lambda
Funktsioone tuleb kasutada parameetrina funktsioonide jaoks, mis aktsepteerivad funktsioone parameetrina, nagu me tegime map()
eespool. Python võimaldab teil määrata a lambda
funktsioon muutujaks, kuid PEP 8 stiilijuhend soovitab seda mitte. Kui soovite muutujale määrata lihtsa funktsiooni, on parem teha seda üherealise definitsioonina. See tagab tulemuseks oleva objekti õige nime, parandades jälgimise loetavust:
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__)
Miks kasutada lambda funktsioone?
Pärast viimast lõiku võite küsida, miks soovite kasutada a lambda
funktsiooni. Lõppude lõpuks on kõik, mida saab teha a lambda
funktsiooni saab teha nimega funktsiooniga.
Vastus sellele on see lambda
funktsiooni eesmärk on elada suuremates avaldistes, mis kujutavad arvutust. Üks võimalus sellest mõelda on muutujate ja väärtustega analoogia põhjal. Mõelge järgmisele koodile:
x = 2
Muutuja x
on täisarvu kohatäide (või nimi). 2
. Näiteks helistades print(x)
ja print(2)
annab täpselt sama väljundi. Funktsioonide puhul:
def square(x): return x**2
funktsioon square()
on kohatäide arvu ruudustamiseks. Selle arvutuse saab kirjutada nimetul viisil kui lambda x: x**2
.
Following this philosophical digression, let’s see some examples of applications for lambda
funktsioone.
Lambda kasutamine funktsiooniga sorted()
. sorted()
funktsioon sorteerib itereeritava. See aktsepteerib funktsiooni kui oma key
argument ja itereeritava igale elemendile rakendatud funktsiooni tulemust kasutatakse elementide järjestamiseks.
See sobib suurepäraselt a lambda
funktsioon: määrates key
parameeter koos a lambda
funktsiooni, saame sortida elementide mis tahes atribuudi järgi. Näiteks saame sortida nimede loendi perekonnanime järgi:
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']
Using Lambda with ‘filter()’ Function
. filter()
funktsioonil on järgmine süntaks: filter(function, iterable)
ja see väljastab elemendid iterable
mis hindavad function(element)
kui tõsi (see on sarnane an WHERE
klausel SQL-is). Saame kasutada lambda
toimib parameetritena filter()
itereeritavast elementide valimiseks.
Kaaluge järgmist näidet:
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()
rakendab lambda
funktsioon lambda x: (x % 3 == 0) and (x % 5 == 0)
igale elemendile range(0,100)
ja tagastab a filter
objektiks. Elementidele pääseme juurde, valades selle kui list
.
Lambda kasutamine funktsiooniga The map()
Our last example is something we’ve seen in the introduction – the map()
funktsioon. The map()
funktsiooni süntaks on: map(function, iterable)
ja map()
kehtib function
igale elemendile iterable
, tagastab a map
objekt, millele pääseb juurde a-sse heites list
.
We’ve seen how this can be applied to lists, but it could be applied to dicts using the dict.items()
meetod:
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
või stringile:
my_string = 'abcdefg'
''.join(map(lambda x: chr(ord(x)+2),my_string))
'cdefghi'
Tutvuge meie praktilise ja praktilise Giti õppimise juhendiga, mis sisaldab parimaid tavasid, tööstusharus aktsepteeritud standardeid ja kaasas olevat petulehte. Lõpetage Giti käskude guugeldamine ja tegelikult õppima seda!
Meil on võimalik kasutada map()
function in ingenious ways – one example is applying many functions to the same input.
Oletame näiteks, et loote API-d, mis võtab vastu tekstistringi, ja soovite sellele rakendada funktsioonide loendit.
Iga funktsioon eraldab tekstist mõne funktsiooni. Funktsioonid, mida tahame eraldada, on sõnade arv, teine sõna ja neljanda sõna neljas täht:
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']
Järeldus
In this guide, we’ve explored the functionality of lambda
functions in Python. We’ve seen that lambda
functions are anonymous functions to be used as an inline function parameter for other functions. We’ve seen some use cases as well as when not to use them.
When programming, it is important to keep in mind Donald Knuth’s quote: “Programs are meant to be read by humans and only incidentally for computers to execute.” With this in mind, lambda
funktsioonid on kasulik tööriist meie koodi lihtsustamiseks, kuid neid tuleks kasutada targalt.