Lambda funktsioonid Pythonis

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 an iterator objektiks. Praktikas valasime tulemuseks a list, tuple, set, dictjne, olenevalt sellest, kumb on mugavam.

Oletame, et soovite loendi iga termini ruudustamiseks kasutada map() funktsiooni. Selleks määratleme a square() funktsiooni ja kasutage seda parameetrina 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]


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 funktsioonid on anonüümsed funktsioonid, mis on saanud oma nime ja süntaksi Alonzo Churchi funktsioonist 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**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__)

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.

Pärast seda filosoofilist kõrvalepõiget vaatame mõnda rakenduste näidet 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']

Lambda kasutamine funktsiooniga 'filter()'

. 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()


Meie viimane näide on midagi, mida oleme näinud sissejuhatuses – 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.

Oleme näinud, kuidas seda saab rakendada loenditele, kuid seda saab rakendada diktaatidele, kasutades 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() funktsioon leidlikel viisidel – üks näide on paljude funktsioonide rakendamine samale sisendile.

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


Selles juhendis oleme uurinud selle funktsioone lambda funktsioonid Pythonis. Oleme seda näinud lambda funktsioonid on anonüümsed funktsioonid, mida kasutatakse muude funktsioonide sisemise funktsiooni parameetrina. Oleme näinud mõningaid kasutusjuhtumeid ja ka seda, millal neid mitte kasutada.

Programmeerimisel on oluline meeles pidada Donald Knuthi tsitaati: "Programmid on mõeldud inimestele lugemiseks ja ainult juhuslikult arvutite täitmiseks." Seda silmas pidades, lambda funktsioonid on kasulik tööriist meie koodi lihtsustamiseks, kuid neid tuleks kasutada targalt.

Ajatempel:

Veel alates Stackabus