Како користити Ламбда функције у Питхон-у [With Examples]

У овом водичу ћете научити све о ламбда функцијама у Питхон-у – од синтаксе до дефинисања ламбда функција до различитих случајева коришћења са примерима кода.

У Питхон-у, ламбда су анонимне функције које имају сажету синтаксу и могу се користити са другим корисним уграђеним функцијама. До краја овог водича научићете како да дефинишете ламбда функције и када бисте требали размислити о њиховом коришћењу у односу на регуларне Питхон функције.

Почнимо!

Питхон Ламбда функција: синтакса и примери

Ево опште синтаксе за дефинисање ламбда функције у Питхон-у:

lambda parameter(s):return value

У горњој општој синтакси:

  • ламбда је кључна реч коју треба да користите да дефинишете ламбда функцију, праћену једним или више параметара које функција треба да преузме.
  • Постоји двотачка која раздваја параметре и повратну вредност.

💡 Када дефинишете ламбда функцију, требало би да обезбедите да се повратна вредност израчунава проценом израза који обухвата један ред кода. То ћете боље разумети када будемо кодирали примере.

Примери Питхон Ламбда функција

Најбољи начин да разумете ламбда функције је да започнете преписивањем регуларних Питхон функција као ламбда функција.

👩🏽‍💻 Можете да кодирате заједно у Питхон РЕПЛ-у или у вдзвдз-овом онлајн Питхон уређивачу.

#1. Размотрите следећу функцију скуаре(), која узима број, нум, као аргумент и враћа квадрат броја.

def square(num):
    return num*num

Можете позвати функцију са аргументима и проверити да ли исправно ради.

>>> square(9)
81
>>> square(12)
144

Можете да доделите овај ламбда израз имену променљиве, рецимо, квадрат1 како бисте дефиницију функције учинили сажетијом: квадрат1 = ламбда број: број*број, а затим позовите функцију квадрат1 са било којим бројем као аргументом. Међутим, знамо да су ламбда функције анонимне, тако да би требало да избегавате да их додељујете променљивој.

За функцију скуаре(), параметар је нум, а повратна вредност је нум*нум. Након што смо их идентификовали, можемо их укључити у ламбда израз и назвати га аргументом, као што је приказано:

>>> (lambda num: num*num)(2)
4

Ово је концепт израза одмах позване функције, где функцију позивамо одмах након што је дефинишемо.

#2. Затим, хајде да препишемо још једну једноставну функцију адд() која узима бројеве, нум1 и нум2, и враћа њихов збир, нум1 + нум2.

def add(num1,num2):
    return num1 + num2

Позовимо функцију адд() са два броја као аргументима:

>>> add(4,3)
7
>>> add(12,5)
17
>>> add(12,6)
18

У овом случају, нум1 и нум2 су два параметра, а повратна вредност је нум1 + нум2.

>>> (lambda num1, num2: num1 + num2)(3,7)
10

Питхон функције такође могу узети подразумеване вредности за параметре. Хајде да изменимо дефиницију функције адд() и поставимо подразумевану вредност параметра нум2 на 10.

def add(num1, num2=10):
    return num1 + num2

У следећим позивима функције:

  • У првом позиву функције, вредност нум1 је 1, а вредност нум2 је 3. Када проследите вредност за број2 у позиву функције, та вредност се користи; функција враћа 4.
  • Међутим, ако проследите само један аргумент (нум1 је 7), подразумевана вредност 10 се користи за број2; функција враћа 17.
>>> add(1,3)
4
>>> add(7)
17

Када пишете функције које узимају подразумеване вредности за одређене параметре као ламбда изразе, можете навести подразумевану вредност када дефинишете параметре.

>>> (lambda num1, num2 = 10: num1 + num2)(1)
11

Када треба да користите ламбда функције у Питхон-у?

Сада када сте научили основе ламбда функција у Питхон-у, ево неколико случајева употребе:

  • Када имате функцију чији је повратни израз један ред кода и не морате да референцирате функцију на другом месту у истом модулу, можете користити ламбда функције. Такође смо кодирали неколико примера да бисмо ово разумели.
  • Можете користити ламбда функције када користите уграђене функције, као што су мап(), филтер() и редуцира().
  • Ламбда функције могу бити од помоћи у сортирању Питхон структура података као што су листе и речници.
  Направите прелепу табелу поравнања са ових 5 алата [Free Templates]

Како користити Питхон Ламбда са уграђеним функцијама

1. Коришћење Ламбда са мапом()

Функција мап() узима итерабле и функцију и примењује функцију на сваку ставку у итерабле, као што је приказано:

Хајде да направимо нумс листу и користимо функцију мап() да креирамо нову листу која садржи квадрат сваког броја у листи бројева. Обратите пажњу на употребу ламбда функције за дефинисање операције квадрирања.

>>> nums = [4,5,6,9]
>>> list(map(lambda num:num*num,nums))
[16, 25, 36, 81]

Пошто функција мап() враћа објекат мапе, требало би да га пребацимо у листу.

▶ Погледајте овај водич о функцији мап() у Питхон-у.

2. Коришћење Ламбда са филтером()

Хајде да дефинишемо бројеве, листу бројева:

>>> nums = [4,5,6,9]

Претпоставимо да желите да филтрирате ову листу и да задржите само непарне бројеве.

Можете користити Питхон-ову уграђену функцију филтер().

Функција филтер() узима услов и итерабле: филтер(услов, итерабле). Резултат садржи само елементе у оригиналном итерабле који задовољавају услов. Можете бацити враћени објекат у Питхон итерабле као што је листа.

Да бисмо филтрирали све парне бројеве, задржаћемо само непарне бројеве. Дакле, ламбда израз треба да буде ламбда нум: нум%2!=0. Количина нум%2 је остатак када се број подели са 2.

  • нум%2!=0 је Тачно кад год је нум непаран, и
  • нум%2!=0 је Фалсе кад год је нум паран.
>>> nums = [4,5,6,9]
>>> list(filter(lambda num:num%2!=0,nums))
[5, 9]

3. Коришћење Ламбда са редукцијом()

Функција редуцира() узима итерабле и функцију. Смањује итеративност применом функције итеративно на ставке итеративног.

Да бисте користили функцију редуцира () мораћете да је увезете из Питхон-овог уграђеног модула фунцтоолс:

>>> from functools import reduce

Хајде да користимо функцију редуцира () да израчунамо збир свих бројева на листи бројева. Дефинишемо ламбда израз: ламбда нум1,нум2:нум1+нум2, као функцију редукције суме.

  Направите прелепу табелу поравнања са ових 5 алата [Free Templates]

Операција редукције ће се десити овако: ф(ф(ф(4,5),6),9) = ф(ф(9,6),9) = ф(15,9) = 24. Овде је ф операција сумирања на две ставке листе, дефинисане ламбда функцијом.

>>> from functools import reduce
>>> nums = [4,5,6,9]
>>> reduce(lambda num1,num2:num1+num2,nums)
24

Питхон Ламбда функције за прилагођавање сортирања

Поред коришћења ламбда функција са уграђеним Питхон функцијама, као што су мап(), филтер() и редуце(), можете их користити и за прилагођавање уграђених функција и метода које се користе за сортирање.

1. Сортирање Питхон листа

Када радите са Питхон листама, често ћете морати да их сортирате на основу одређених критеријума сортирања. Да бисте сортирали Питхон листе на месту, можете користити уграђени метод сорт() на њима. Ако вам је потребна сортирана копија листе, можете користити сортед() функцију.

Синтакса за коришћење Питхон-ове сортед() функције је сортирана (итерабле, кеи=…,реверсе= Труе | Фалсе).

– Кључни параметар се користи за прилагођавање сортирања.
– Обрнути параметар се може подесити на Тачно или Нетачно; подразумевана вредност је Фалсе.

Када сортирате листе бројева и низова, подразумевано сортирање је у растућем и абецедном редоследу, респективно. Међутим, понекад ћете желети да дефинишете неки прилагођени критеријум за сортирање.

Размотрите следећу листу воћа. Претпоставимо да желите да добијете сортирану копију листе. Требало би да сортирате низове према броју појављивања ‘п’ у њима – у опадајућем редоследу.

>>> fruits = ['apple','pineapple','grapes','mango']

Време је да користите опциони параметар кључа. Стринг је итерабле у Питхон-у и да бисте добили број појављивања карактера у њему, можете користити уграђени .цоунт() метод. Дакле, поставили смо кључ на ламбда к:к.цоунт(‘п’) тако да је сортирање засновано на томе колико пута се ‘п’ појављује у низу.

>>> fruits = ['apple','pineapple','grapes','mango']
>>> sorted(fruits,key=lambda x:x.count('p'),reverse=True)
['pineapple', 'apple', 'grapes', 'mango']

У овом примеру:

  • Кључ за сортирање је број појављивања знака ‘п’, а он је дефинисан као ламбда израз.
  • Пошто смо обрнути параметар поставили на Тачно, сортирање се дешава у опадајућем редоследу у односу на број појављивања ‘п’.

На листи воћа, ‘ананас’ садржи 3 појављивања ‘п’, а низови ‘јабука’, ‘грожђе’ и ‘манго’ садрже 2, 1 и 0 појављивања ‘п’, респективно.

  Како проверити статус захтева за ФедЕк

Разумевање стабилног сортирања

Размотрите још један пример. За исти критеријум сортирања, редефинисали смо листу воћа. Овде се ‘п’ појављује у низовима ‘јабука’ и ‘грожђе’ двапут и једном, респективно. И никада се не појављује у жицама ‘манго’ и ‘диња’.

>>> fruits = ['mango','apple','melon','grapes']
>>> sorted(fruits,key=lambda x:x.count('p'),reverse=True)
['apple', 'grapes', 'mango', 'melon']

У излазној листи, ‘манго’ долази испред ‘диње’ иако оба немају карактер ‘п’. Али зашто је то случај? Функција сортед() врши стабилно сортирање; па када је број ‘п’ једнак за два низа, редослед елемената у оригиналној листи воћа је очуван.

Као брзу вежбу, замените позиције „манга“ и „диње“ на листи воћа, сортирајте листу на основу истог критеријума и посматрајте резултат.

▶ Сазнајте више о сортирању Питхон листа.

2. Сортирање Питхон речника

Такође можете да користите ламбда када сортирате Питхон речнике. Размотрите следећи речник прице_дицт који садржи ставке и њихове цене.

>>> price_dict = {
... 'Milk':10,
... 'Honey':15,
... 'Bread':7,
... 'Candy':3
... }

Да бисте добили парове кључ/вредност речника као листу торки, можете користити уграђени метод речника .итемс():

>>> price_dict_items = price_dict.items()
dict_items([('Milk', 10), ('Honey', 15), ('Bread', 7), ('Candy', 3)])

У Питхон-у, сви итерабле: листе, торке, стрингови и друго, прате нулто индексирање. Дакле, прва ставка је на индексу 0, друга ставка је на индексу 1, и тако даље.

Желели бисмо да сортирамо по вредности, која је цена сваке ставке у речнику. У свакој торци на листи прице_дицт_итемс, ставка на индексу 1 је цена. Дакле, поставили смо кључ на ламбда к:к[1] јер ће користити ставку са индексом 1, цена, да сортира речник.

>>> dict(sorted(price_dict_items,key=lambda x:x[1]))
{'Candy': 3, 'Bread': 7, 'Milk': 10, 'Honey': 15}

У излазу, ставке из речника су сортиране узлазним редоследом цена: почевши од ‘Бомбона’, по цени од 3 јединице до ‘Хонеи’, по цени од 15 јединица.

▶ Да бисте сазнали више, погледајте овај детаљни водич за сортирање Питхон речника по кључу и вредности.

Сумирајући

И ето га! Научили сте како да дефинишете ламбда функције и да их ефикасно користите са другим Питхон уграђеним функцијама. Ево резимеа кључних закључака:

  • У Питхон-у, ламбда су анонимне функције које могу узети више аргумената и вратити вредност; израз који треба проценити за генерисање ове повратне вредности треба да буде један ред кода. Могу се користити да би дефиниције малих функција биле сажетије.
  • Да бисте дефинисали Ламбда функцију, можете користити синтаксу: ламбда параметар(и): повратна вредност.
  • Неки од важних случајева употребе укључују њихову употребу са функцијама мап(), филтер() и редуцира() и као кључни параметар за прилагођавање сортирања Питхон итерабле.

Затим научите како да извршите поделу у Питхон-у.