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() function. In order to do that, we’ll define 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 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**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.

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.

Ajatempel:

Veel alates Stackabus