Коли не слід використовувати лямбди

Коли не слід використовувати лямбди



29) Лямбда-функції Python

Лямбди, також відомі як анонімні функції, є невеликі обмежені функції, яким не потрібне ім'я (тобто ідентифікатор). Лямбда-функції були введені в область математики Алонзо Черчем в 1930-х роках.

Сьогодні багато сучасних мов програмування, таких як Java, Python, C# і C++, підтримують лямбда-функції для додавання функціональності до мов.

У цьому уроці по лямбді ви дізнаєтесь:

  • Що таке лямбда?
  • Лямбди в Python
  • Синтаксис та приклади
  • Використання лямбди із вбудованими Python
  • лямбди у фільтрі ()
  • лямбди на карті ()
  • лямбди у зменшенні ()
  • Чому (і чому ні) використовувати лямбда функції?
  • Лямбда проти регулярних функцій

Лямбди в Python

У Python лямбда-вирази (або лямбда-форми) використовуються для створення анонімних функцій. Для цього ви будете використовувати ключове слово lambda (так само, як ви використовуєте def визначення нормальних функцій).

Кожна анонімна функція, яку ви визначаєте в Python, складатиметься з трьох основних частин:

  • Ключове слово Лямбда.
  • Параметри (або пов'язані змінні) та
  • Тіло функції.

Функція Лямбда може мати будь-яку кількість параметрів, але тіло функції може містити тільки одне вираз.

Більше того, лямбда записується в одному рядку коду і може бути викликана негайно. Ви побачите все це в дії наведених нижче прикладів.

Синтаксис та приклади

Формальний синтаксис для написання лямбда-функції наведено нижче:

lambda p1, p2: expression

Тут p1 і p2 - параметри, що передаються лямбда-функції. Ви можете додати стільки параметрів, скільки вам потрібно.

Однак зверніть увагу, що ми не використовуємо дужки навколо параметрів, як із звичайними функціями. Остання частина (вираз) – це будь-який допустимий вираз Python, який працює з параметрами, які ви надаєте функції.

Приклад 1

Тепер, коли ви знаєте про лямбди, спробуймо це на прикладі. Отже, відкрийте свій IDLE та введіть наступне:

adder = lambda x, y: x + y print (adder (1, 2))

Ось висновок:

Код Пояснення

Тут ми визначаємо змінну, яка міститиме результат, що повертається лямбда-функцією.

1. Ключове слово lambda, що використовується визначення анонімної функції.

2. x та y - параметри, які ми передаємо лямбда-функції.

3. Це тіло функції, яке додає два параметри, які ми передали. Зверніть увагу, що це один вираз. Ви не можете написати кілька операторів у тілі лямбда-функції.

4. Викликаємо функцію і друкуємо значення, що повертається.

Приклад 2

Це був базовий приклад для розуміння основ та синтаксису лямбди. Давайте спробуємо роздрукувати лямбду і подивимося на результат. Знову відкрийте свій IDLE та введіть наступне:

#What a lambda returns string='який малюнок з найнеобхіднішою lambda' print(lambda string : print(string))

Тепер збережіть файл і натисніть F5, щоб запустити програму. Це висновок, який ви повинні отримати.

 at 0x00000185C3BF81E0>

Що тут відбувається? Давайте подивимося на код, щоб зрозуміти далі.

  1. Тут ми визначаємо рядок, який ви передасте як параметр лямбде.
  2. Ми оголошуємо лямбду, яка викликає оператор друку та друкує результат.

Але чому програма не друкує рядок, який ми передаємо? Це тому, що сама лямбда повертає багатофункціональний об'єкт. У цьому прикладі лямбда не називається функцією друку, але просто повертаючи об'єкт функції та місце в пам'яті, де вона зберігається. Ось що друкується на консолі.

Приклад 3

Однак, якщо ви напишіть програму, подібну до цієї:

#What a lambda returns #2 x="котрий м'яч з найнеобхіднішої lambda" (lambda x : print(x))(x)

І запустіть його, натиснувши F5, і ви побачите такий висновок.

хтось м'яч useless lambda

Тепер викликається лямбда, і рядок, що передається нами, друкується на консолі. Але що це за дивний синтаксис і чому лямбда-визначення укладено у квадратні дужки? Давайте зрозуміємо це зараз.

  1. Ось той рядок, який ми визначили в попередньому прикладі.
  2. У цій частині ми визначаємо лямбду і негайно викликаємо її, передаючи рядок як аргумент. Це те, що називається IIFE, і ви дізнаєтесь більше про це у наступних розділах цього посібника.

Приклад 4

Давайте подивимося на останній приклад, щоб зрозуміти, як виконуються лямбда-вирази та звичайні функції. Отже, відкрийте свій IDLE і введіть в новому файлі наступне:

#A REGULAR FUNCTION def guru( funct, *args ): funct( *args ) def printer_one( arg ): return print (arg) def printer_two( arg ): print(arg) #CALL A REGULAR FUNCTION guru( printer_one, 1 REGULAR CALL') guru( printer_two, 'printer 2 REGULAR CALL \n')

Збережіть файл і натисніть F5, щоб запустити програму. Якщо ви не припустилися помилок, висновок має бути приблизно таким.

принтер 1 звичайний дзвінок

принтер 2 РЕГУЛЯРНИЙ ВИКЛИК

принтер 1 LAMBDA CALL

принтер 2 LAMBDA CALL

  1. Функція з ім'ям guru, яка приймає іншу функцію як перший параметр і будь-які інші аргументи після нього.
  2. printer_one - це проста функція, яка друкує переданий їй параметр і повертає його.
  3. printer_two схожий на printer_one, але без оператора return.
  4. У цій частині ми викликаємо функцію гуру і передаємо функції принтера та рядок як параметри.
  5. Це синтаксис для досягнення четвертого кроку (тобто виклик функції гуру), але з використанням лямбд.

У наступному розділі ви дізнаєтеся, як використовувати лямбда-функції з map (), redu () і filter() у Python.

Використання лямбди із вбудованими Python

Лямбда-функції надають елегантний та потужний спосіб виконання операцій з використанням вбудованих методів у Python. Це можливо, тому що лямбди можуть бути викликані негайно і передані як аргумент цих функцій.

IIFE у Python Lambda

IIFE позначає виконання негайно викликаної функції. Це означає, що лямбда-функція викликається, коли вона визначена. Давайте розберемося з цим на прикладі; запустіть ваш IDLE і введіть наступне:

Ось висновок та пояснення коду:

Ця здатність викликати лямбди негайно дозволяє використовувати їх всередині функцій, таких як map () і redu (). Це корисно, тому що ви не можете захотіти використовувати ці функції знову.

лямбди у фільтрі ()

Функція фільтра використовується для вибору деяких конкретних елементів із послідовності елементів. Послідовність може бути будь-яким ітератором, таким як списки, множини, кортежі тощо. Д.

Елементи, які будуть вибрані, базуються на певному обмеженні. Потрібно 2 параметри:

  • Функція, яка визначає обмеження фільтрації
  • Послідовність (будь-який ітератор, такий як списки, кортежі і т. д.)
sequences = [10,2,8,7,5,4,3,11,0, 1] filtered_result = filter (lambda x: x > 4, sequences) print(list(filtered_result))

Ось висновок:

Пояснення коду:

1. У першому твердженні ми визначаємо список, який називають послідовностями, який містить кілька чисел.

2. Тут ми оголошуємо змінну з ім'ям Filter_result, яка зберігатиме відфільтровані значення, що повертаються функцією filter().

3. Лямбда-функція, яка запускається для кожного елемента списку та повертає значення true, якщо воно більше 4.

4. Роздрукуйте результат, який повертається функцією фільтра.

лямбди на карті ()

функція map використовується застосування певної операції до кожного елементу в послідовності. Як і filter(), він також приймає 2 параметри:

  1. Функція, яка визначає операцію, щоб виконати елементи
  2. Одна чи кілька послідовностей

Наприклад, ось програма, яка друкує квадрати чисел у цьому списку:

sequences = [10,2,8,7,5,4,3,11,0, 1] filtered_result = map (lambda x: x*x, sequences) print(list(filtered_result))
[100, 4, 64, 49, 25, 16, 121, 0, 1]
  1. Тут ми визначаємо список, який називають послідовностями, який містить кілька чисел.
  2. Ми оголошуємо змінну з ім'ям Filter_result, яка зберігатиме зіставлені значення
  3. Функція Лямбда, яка запускається для кожного елемента списку і повертає квадрат цього числа.
  4. Роздрукувати результат, повернутий функцією картки.

лямбди у зменшенні ()

Функція Reduce, наприклад map(), використовується для застосування операції до кожного елемента у послідовності. Тим не менш, він відрізняється від карти у своїй роботі. Далі йдуть кроки, які виконує функція redu () для обчислення висновку:

Крок 1) Виконайте задану операцію на перших 2 елементах послідовності.

Крок 2) Збережіть цей результат

Крок 3) Виконайте операцію зі збереженим результатом та наступним елементом у послідовності.

Крок 4) Повторюйте, доки не залишиться більше елементів.

Він також приймає два параметри:

  1. Функція, яка визначає операцію, яка буде виконана
  2. Послідовність (будь-який ітератор, такий як списки, кортежі і т. д.)

Наприклад, ось програма, яка повертає добуток всіх елементів у списку:

з functools import reduce sequences = [1,2,3,4,5] product = reduce (lambda x, y: x*y, sequences) print(product)

Ось висновок:

  1. Зменшення імпорту з модуля functools
  2. Тут ми визначаємо список, який називають послідовностями, який містить кілька чисел.
  3. Ми оголошуємо змінну з ім'ям product, яка зберігатиме зменшене значення
  4. Лямбда-функція, яка запускається для кожного елемента списку. Він поверне твір цього числа відповідно до попереднього результату
  5. Роздрукувати результат, який повертається функцією Reduce.

Чому (і чому ні) використовувати лямбда функції?

Як ви побачите в наступному розділі, лямбди обробляються так само, як і звичайні функції на рівні інтерпретатора.

Однак, ви повинні знати, коли варто використовувати лямбди і коли їх уникати.

Один з найпоширеніших варіантів використання лямбд – у функціональному програмуванні, оскільки Python підтримує парадигму (або стиль) програмування, відому як функціональне програмування.

Це дозволяє вам надавати функцію як параметр іншої функції (наприклад, карті, фільтрі тощо. буд.). У таких випадках використання лямбда-виразу пропонує елегантний спосіб створення одноразової функції та передачі її як параметр.

Коли не слід використовувати лямбду?

Ви ніколи не повинні писати складні лямбда-функції у виробничому середовищі. Кодерам, які підтримують ваш код, буде важко розшифрувати його. Якщо ви виявите, що робите складні однорядкові вирази, було б краще визначити правильну функцію. Рекомендується пам'ятати, що простий код завжди кращий за складний код.

Лямбда проти регулярних функцій

Як мовилося раніше, лямбды — це [vV4] [J5] просто функції, із якими пов'язаний ідентифікатор. Простіше кажучи, це функції без імен (отже, анонімні). Ось таблиця, щоб проілюструвати різницю між лямбдами та звичайними функціями в python.

Лямбда

Регулярні функції

Лямбда-функції можуть мати лише один вираз у своєму тілі.

Регулярні функції можуть мати кілька виразів та операторів у своєму тілі.

Лямбди немає імені, що з ними. Ось чому вони також відомі як анонімні функції.

Звичайні функції повинні мати ім'я та підпис.

Лямбди не містять оператора return, тому що тіло повертається автоматично.

Функції, які мають повертати значення, повинні містити інструкцію повернення.

Пояснення відмінностей?

Основна відмінність лямбда функції від звичайної функції полягає в тому, що лямбда функція обчислює тільки один вираз і видає об'єкт функції. Отже, ми можемо назвати результат лямбда-функції та використовувати його у нашій програмі, як ми це робили у попередньому прикладі.

Звичайна функція для наведеного вище прикладу виглядатиме так:

def adder (x, y): return x + y print (adder (1, 2))

Тут ми маємо визначити ім'я для функції, яка повертає результат при його виклик . Лямбда-функція не містить оператора return, тому що вона матиме лише один вираз, який завжди повертається за умовчанням. Вам навіть не потрібно призначати лямбду, оскільки вона може бути негайно викликана (див. наступний розділ). Як ви побачите в наступному прикладі, лямбди стають особливо потужними, коли ми використовуємо їх із вбудованими функціями Python.

Тим не менш, ви все ще можете поставити питання, чим лямбди відрізняються від функції, яка повертає єдиний вираз (як показано вище). На рівні перекладача немає великої різниці. Це може звучати напрочуд, але будь-яка лямбда-функція, яку ви визначаєте в Python, інтерпретатор інтерпретує як нормальну функцію.

Як ви можете бачити на діаграмі, ці два визначення обробляються інтерпретатором Python однаково при перетворенні на байт-код. Тепер ви не можете назвати лямбда- функцію, тому що вона зарезервована Python, але будь-яке інше ім'я функції дасть той же байт-код [KR6].

Резюме

  • Лямбди, також відомі як анонімні функції, є невеликі обмежені функції, яким не потрібне ім'я (тобто ідентифікатор).
  • Кожна лямбда-функція в Python складається з трьох основних частин:
  • Ключове слово Лямбда.
  • Параметри (або пов'язані змінні) та
  • Тіло функції.
  • Синтаксис для написання лямбда-виразу: параметр лямбда-виразу: вираз
  • Лямбда може мати будь-яку кількість параметрів, але вони не поміщені у фігурні дужки
  • Лямбда може мати лише один вираз у тілі функції, яке повертається за умовчанням.
  • На рівні байт-коду немає великої різниці між тим, як інтерпретатор обробляє лямбди та звичайні функції.
  • Лямбди підтримують IIFE через цей синтаксис: (лямбда-параметр: вираз) (аргумент)
  • Лямбди зазвичай використовуються з такими вбудованими модулями Python:
  • Фільтр: фільтр (лямбда-параметр: вираз, ітеративна послідовність)
  • Карта: карта (лямбда-параметр: вираз, ітеративні послідовності)
  • Зменшити: зменшити (лямбда-параметр1, параметр2: вираз, ітеративна послідовність)
  • Не пишіть складні лямбда функції у виробничому середовищі, тому що це буде складно для розробників коду.

[J5] Я додав таблицю, але розуміння відмінностей необхідно пояснення.

[vV4] Помістіть цей розділ у таблицю fomat. Перегляньте це посилання: https://www.guru99.com/call-by-value-vs-call-by-reference.html додати додаткові пункти в цьому розділі.

[J3] Це нижче пояснення

[vV2] Зображення відсутнє у цьому розділі.

[JP1] Не хочете, щоб зображення коду… просто вставте висновок у тег pre… робіть це скрізь

[KR6] Додайте більше прикладів, тому що ми хочемо, щоб кількість слів була 2300+

Функція Лямбда в Python

Python lambdas – це невеликі, анонімні, суб-синтаксичні роботи, які більш обмежені, але коротші, ніж звичайні функції Python.

У цій статті ми побачимо все про лямбду. Ми обговоримо та постараємося відповісти на наступне питання про лямбду:

  1. Звідки з'явилася лямбда
  2. Що таке лямбда-функція
  3. Як використовувати лямбда-функцію
  4. Коли слід уникати лямбда-функції
  5. Альтернативи лямбда

Лямбда - це концепція не тільки в Python, вона використовується в інших мовах програмування, таких як Java, C#, C++ тощо. буд. Концепція лямбда у мовах програмування вийшла з обчислювальної математики.

Звідки з'явилася лямбда

Історія лямбда розпочалася ще у 30-х роках минулого століття. Алонзо Черч, найбільш відомий своїм лямбда-обчисленням, тезою Черча - Тьюринга, був американським математиком і логіком, який формалізував лямбда-обчислення. Функціональні мови беруть свій початок у математичній логіці та лямбда-обчисленні, тоді як ключові мови програмування використовують модель обчислень на основі станів, розроблену Аланом Тьюрінгом. Дві обчислювальні моделі, лямбда-обчислення та машини Тьюринга, можна перетворити на одну. Ця схожість відома як гіпотеза Черча-Тьюринга.

Функціональні мови, такі як Haskell та Lisp, успадковують лямбда-числення, але такі мови, як Python або C, успадковують імперативне програмування.

Спочатку Python не був функціональною мовою, але на пізніших етапах він приймає кілька функціональних концепцій.

Я можу докладніше розповісти про історію лямбду, але це не є наша основна тема для обговорення. Отже, перейдемо до наступної теми.

Що таке лямбда-функція

Функція Лямбда - це анонімні функції в Python. Лямбда функції схожі на звичайні функції. Різниця між звичайною функцією та лямбда-функцією полягає в тому, що вони можуть бути визначені без імені, але звичайні функції визначаються за допомогою ключового слова def.

Ключове слово lambda використовується визначення анонімної чи лямбда-функции.

Якщо ми порівняємо лямбда-функцію та звичайну функцію, то,

  1. Лямбда - функція може приймати будь-яку кількість аргументів, але може мати лише одне вираз, тоді як звичайна функція має точну кількість аргументів, які ми оголошуємо в момент визначення.
  2. Лямбда-функція - це однорядкова функція. Її тіло містить вираз у тому рядку, в якому воно визначено. У звичайних функціях функції містять блоки тіла, в яких визначені для виконання деякі оператори.
  3. Оскільки лямбда – це однорядкова функція, її можна викликати миттєво, але звичайна функція має викликати сама себе та вимагати часу для виклику.
x = lambda x, y : x * y print (x (3,4))
x = ( lambda x, y : x * y) (2,3) print (x)

У наведеному вище коді показана лямбда-функція, яка дає добуток двох змінних x та y. У наведеному вище прикладі x - це змінна, яка зберігатиме значення лямбда-вираження, що повертається.

Частини лямбда-вираження.

Ключове слово – лямбда.

Ми можемо передати аргументи функції, уклавши функцію та її аргумент у круглі дужки:

Нижче наведено приклад передачі аргументів в одному рядку.

x = ( lambda x, y : x * y) (2,3) print (x)

Ви також можете написати лямбду без імені змінної. Отже, ми зрозуміли, що лямбда-функцію можна писати без імені та змінної.

Як використовувати лямбда-функцію

Досі я викладав теоритичні відомості про лямбду, тому ми розберемося, як використовувати лямбду, за допомогою прикладів.

Приклад 1 Напишіть програму для обчислення експонентів за допомогою лямбда-функції.

Щоб вирішити наведений вище приклад, я створив дуже гарну візуалізацію, щоб зрозуміти процес. Ви можете вирішити це таким чином:

  1. Спочатку я визначаю лямбда-вираз для обчислення експонентів.
  2. Передаю вираз лямбда-функції, представленої квадратним прямокутником.
  3. Лямбда-функція представлена ​​прямокутником. Вона дасть вам результат після розрахунків.
  4. Код нижче.
Exp = (lambda x, y : x** y) (4,4) print(Exp)

Я взяв інші значення, але це не є проблемою.

Тепер я хочу обговорити тут ще одну важливу річ. Лише небагато програмістів обговорюють це. Для цього я беру інший приклад.

Спочатку знаємося на коді.

  1. Я просто визначив рядок і зберіг її в змінній name, яка була передана лямбда-виразу як параметр.
  2. Після цього оголосив лямбду, що друкує результат.
  3. Але результату не одержав.

Це тому, що сама лямбда повертає об'єкт функції. У наведеному вище прикладі лямбда просто повертає об'єкт функції та місце у пам'яті, де він зберігається. І висновок, який ми отримуємо на консолі, – це те місце.

Тепер я зроблю деякі зміни, щоб отримати бажаний результат.

Тепер я отримав те, що хочу від лямбда-виразу, але є ще один результат – «Ні».

Тепер, коли я запускаю код, моя зовнішня функція друку намагається викликати лямбда-функцію, а внутрішня функція виклику змінює ім'я. Отже, внутрішній друк дає мені рядок, а зовнішній друк повертає об'єкт із лямбда-функції.

Тепер він дає мені правильний результат, який мені потрібний обома способами.

Подивіться, наскільки напруженим було це завдання – надрукувати оператор із використанням лямбду.

Тут потрібно зрозуміти, коли використовувати лямбда, а коли уникати.

Тепер я напишу той самий код із звичайною функцією.

Як це просто?

Коли слід уникати лямбда-функції

Отже, нам потрібно уникати лямбду для простих завдань та розуміти використання лямбду.

Коли ми використовували лямбда-функцію, ми не використовували ім'я функції, і не було потреби явно викликати лямбда-функцію, тому лямбда називається анонімною функцією.

Для звичайної функції ми визначаємо ім'я функції print_line, і там є тіло, але у випадку лямбда-функції тіла не було. То була одинарна лінія.

Ось деякі моменти проти використання лямбда-функції в Python:

  1. Читання коду
  2. Примушувати мислити функціонально
  3. Дивний синтаксис
  4. Загадковий стиль

Альтернативи лямбда

Розуміння списків – найкраща альтернатива лямбда. У деяких випадках лямбда-вираз використовується з функціями map(), reduce() та filter(), але те ж саме може бути виконано з розумінням списку разом із циклом for.

Тепер ви можете самі подумати, як і коли використовувати функції лямбди.

Я сподіваюся, що ця стаття допоможе новачкові зрозуміти запровадження лямбду.

Лямбда-функція в Python простими словами

У цій статті ви докладніше вивчите анонімні функції, також звані "лямбда-функції". Давайте розберемося, що це таке, який їхній синтаксис і як їх використовувати (з прикладами). Лямбда-функції Python є анонімними. Це означає, що функція безіменна. Як відомо, ключове слово def використовується в Python для визначення звичайної функції. У свою чергу ключове слово lambda використовується для визначення анонімної функції.

Лямбда-функція має наступний синтаксис.

Lambda аргументи: вираз

Лямбда-функції можуть мати будь-яку кількість аргументів, але кожна може мати лише один вираз. Вираз обчислюється та повертається. Ці функції можуть бути використані скрізь, де потрібна функція об'єкта.

1.1. Приклад лямбда функції.

double = lambda x: x*2 print(double(5))

У вказаному вище коді lambda x: x*2 — це лямбда-функція.Тут x - це аргумент, а x * 2 - це вираз, який обчислюється та повертається. Ця функція безіменна. Вона повертає функціональний об'єкт з ідентифікатором double. Тепер ми можемо вважати її нормальною функцією. Інструкція:

def double(x): return x * 2
  • Ця функція може мати будь-яку кількість аргументів, але обчислює та повертає лише одне значення
  • Лямбда-функції застосовні скрізь, де потрібні об'єкти-функції
  • Ви повинні пам'ятати, що синтаксично лямбда-функція обмежена, дозволяє уявити лише один вираз
  • Вони мають безліч варіантів застосування в конкретних сферах програмування, поряд з іншими типами виразів, що використовуються у функціях.

2. Відмінність між звичайною функцією та лямбда-функцією

Розглянемо приклад і спробуємо зрозуміти різницю між визначенням ( Def ) для звичайної функції та lambda -функції. Цей код повертає задане значення, зведене в куб:

def defined_cube(y): return y*y*y lambda_cube = lambda y: y*y*y print(defined_cube(2)) print(lambda_cube(2))

Як показано в прикладі вище, обидві представлені функції defined_cube() і lambda_cube() ведуть себе однаково, як і передбачалося.

Розберемо вищезгаданий приклад докладніше:

  • Без використання лямбди: Тут обидві функції повертають задане значення, зведене куб. Але при використанні def , нам довелося визначити функцію з ім'ям та defined_cube() дати їй вхідну величину. Після виконання нам також знадобилося повернути результат з того місця, звідки була викликана функція, і ми зробили це, використовуючи ключове слово return .
  • Із застосуванням лямбди: Визначення лямбди не включає оператора return , а завжди містить повернутий вираз. Ми також можемо помістити визначення лямбди в будь-яке місце, де очікується функція, і нам не потрібно надавати його змінній.Так виглядають прості лямбда функції.

3. Лямбда-функції та функції вищого порядку

Ми використовуємо лямбда-функцію, коли нам ненадовго потрібна безіменна функція.

У Python ми часто використовуємо їх як аргумент функції вищого порядку (функція, яка приймає інші функції як аргументи). Лямбда-функції використовують разом із такими вбудованими функціями як filter() , map() , reduce() та ін.

Давайте розглянемо ще кілька найпоширеніших варіантів використання лямбда-функцій.

3.1. Приклад з filter()

Функція filter() в Python приймає як аргументи функцію і список .

Функція викликається з усіма елементами списку, і в результаті повертається новий список, що містить елементи, для яких функція результує в True .

Ось приклад використання функції filter() для відбору парних чисел зі списку.

my_list = [1, 3, 4, 6, 10, 11, 15, 12, 14] new_list = list(filter(lambda x: (x%2 == 0) , my_list))

3.2. Приклад з map()

Функція map() приймає як аргументи функцію та список.

Функція викликається з усіма елементами списку, і в результаті повертається новий список, що містить елементи, повернені даною функцією кожного вихідного елемента.

Нижче наведено приклад використання функції map() для подвоєння всіх елементів списку.

current_list = [1, 3, 4, 6, 10, 11, 15, 12, 14] print(new_list)
[2, 6, 8, 12, 20, 22, 30, 24, 28]

3.3. Приклад з reduce()

Функція reduce() приймає як аргументи функцію та список. Функція викликається за допомогою лямбда-функції та об'єкта, що ітерується, і повертається новий зменшений результат. Так виконується операція, що повторюється над парами об'єктів, що ітеруються. Функція reduce() входить до складу модуля functools .

з functools import reduce current_list = [5, 15, 20, 30, 50, 55, 75, 60, 70] summa = reduce((lambda x, y: x + y), current_list) print(summa)

Тут результати попередніх двох елементів підсумовуються наступним елементом, і це триває до кінця списку, ось так:

4. Лямбда та спискове включення

У цьому прикладі ми будемо використовувати лямбда-функцію зі списковим включенням та лямбда-функцію з циклом for . Ми виведемо на екран таблицю із 10 елементів.

tables = [lambda x = x: x*10 for x in range(1, 11)] for table in tables: print(table())
10 20 30 40 50 60 70 80 90 100

5. Лямбда та умовні оператори

Давайте розглянемо використання умов if-else у лямбда-функції. Як ви знаєте, Python дозволяє нам використовувати однорядкові умови, і саме їх ми можемо поміщати в лямбда-функцію для обробки результату, що повертається.

Наприклад, є дві цифри, і ви повинні визначити, яка з них є найбільшою кількістю.

max_number = lambda a, b: a if a > b else b print(max_number(3, 5))

Цей метод дозволяє вам додавати умови до лямбда-функцій.

6. Лямбда та множинні оператори

Функції Лямбда не допускають використання кількох операторів, однак ми можемо створити дві лямбда-функції, а потім викликати другу лямбда-функцію як параметр для першої функції. Спробуємо знайти другий за величиною елемент, використовуючи лямбду.

current_list = [[10,6,9],[0, 14, 16, 80],[8, 12, 30, 44]] sorted_list = lambda x: (sorted(i) for i in x) second_largest = lambda x , func: [y[len(y)-2] for y in func(x)] result = second_largest(current_list, sorted_list) print(result)

У попередньому прикладі ми створили лямбда-функцію, яка сортує кожен вкладений список у заданому списку. Потім цей список проходить як параметр для другої лямбда-функції, яка повертає елемент n-2 відсортованого списку, де n - довжина вкладеного списку.

Висновок

Тепер ви знаєте, як використовувати в Python lambda -функції і можете:

  • Писати та використовувати лямбда-функції.
  • Раціонально вибирати між звичайними та лямбда-функціями в Python.
  • Використовувати лямбди з функціями вищого ладу або ключовими функціями.
  • Використовуйте лямбди з абстракції списків.
  • Додавати умови до лямбда-функцій.

Схожі статті

  • Де не слід використовувати конопачення
  • Коли використовувати гель для боротьби з прищами Cerave
  • Коли слід вимикати покажчики повороту під час обгону
  • Коли не можна використовувати бадягу
  • Коли не можна використовувати Назонекс
  • Коли день народження у стрічці
  • Коли створили біту
  • Коли бананове дерево дає плоди
  • Недавні статті

  • Чому взуття скрипить при ходьбі
  • Коли день народження у стрічці
  • Чи можна кішці їсти сіль
  • Варіанти планування ділянки 15 соток прямокутної форми
  • Що означає півмісяця знак
  • Рейсмусовий верстат для чого
  • У якому віці парують свиней
  • У чому полягає принцип нарахування та у яких випадках він застосовується