Лямбди, також відомі як анонімні функції, є невеликі обмежені функції, яким не потрібне ім'я (тобто ідентифікатор). Лямбда-функції були введені в область математики Алонзо Черчем в 1930-х роках. Сьогодні багато сучасних мов програмування, таких як Java, Python, C# і C++, підтримують лямбда-функції для додавання функціональності до мов. У цьому уроці по лямбді ви дізнаєтесь: У Python лямбда-вирази (або лямбда-форми) використовуються для створення анонімних функцій. Для цього ви будете використовувати ключове слово lambda (так само, як ви використовуєте def визначення нормальних функцій). Кожна анонімна функція, яку ви визначаєте в Python, складатиметься з трьох основних частин: Функція Лямбда може мати будь-яку кількість параметрів, але тіло функції може містити тільки одне вираз. Більше того, лямбда записується в одному рядку коду і може бути викликана негайно. Ви побачите все це в дії наведених нижче прикладів. Формальний синтаксис для написання лямбда-функції наведено нижче: Тут p1 і p2 - параметри, що передаються лямбда-функції. Ви можете додати стільки параметрів, скільки вам потрібно. Однак зверніть увагу, що ми не використовуємо дужки навколо параметрів, як із звичайними функціями. Остання частина (вираз) – це будь-який допустимий вираз Python, який працює з параметрами, які ви надаєте функції. Тепер, коли ви знаєте про лямбди, спробуймо це на прикладі. Отже, відкрийте свій IDLE та введіть наступне:
Ось висновок:
Тут ми визначаємо змінну, яка міститиме результат, що повертається лямбда-функцією.
1. Ключове слово lambda, що використовується визначення анонімної функції.
2. x та y - параметри, які ми передаємо лямбда-функції.
3. Це тіло функції, яке додає два параметри, які ми передали. Зверніть увагу, що це один вираз. Ви не можете написати кілька операторів у тілі лямбда-функції.
4. Викликаємо функцію і друкуємо значення, що повертається. Це був базовий приклад для розуміння основ та синтаксису лямбди. Давайте спробуємо роздрукувати лямбду і подивимося на результат. Знову відкрийте свій IDLE та введіть наступне: Тепер збережіть файл і натисніть F5, щоб запустити програму. Це висновок, який ви повинні отримати. Що тут відбувається? Давайте подивимося на код, щоб зрозуміти далі. Але чому програма не друкує рядок, який ми передаємо? Це тому, що сама лямбда повертає багатофункціональний об'єкт. У цьому прикладі лямбда не називається функцією друку, але просто повертаючи об'єкт функції та місце в пам'яті, де вона зберігається. Ось що друкується на консолі. Однак, якщо ви напишіть програму, подібну до цієї: І запустіть його, натиснувши F5, і ви побачите такий висновок. Тепер викликається лямбда, і рядок, що передається нами, друкується на консолі. Але що це за дивний синтаксис і чому лямбда-визначення укладено у квадратні дужки? Давайте зрозуміємо це зараз. Давайте подивимося на останній приклад, щоб зрозуміти, як виконуються лямбда-вирази та звичайні функції. Отже, відкрийте свій IDLE і введіть в новому файлі наступне: Збережіть файл і натисніть F5, щоб запустити програму. Якщо ви не припустилися помилок, висновок має бути приблизно таким. принтер 1 звичайний дзвінок принтер 2 РЕГУЛЯРНИЙ ВИКЛИК принтер 1 LAMBDA CALL принтер 2 LAMBDA CALL У наступному розділі ви дізнаєтеся, як використовувати лямбда-функції з map (),
redu () і filter() у Python. Лямбда-функції надають елегантний та потужний спосіб виконання операцій з використанням вбудованих методів у Python. Це можливо, тому що лямбди можуть бути викликані негайно і передані як аргумент цих функцій.
IIFE позначає виконання негайно викликаної функції. Це означає, що лямбда-функція викликається, коли вона визначена. Давайте розберемося з цим на прикладі; запустіть ваш IDLE і введіть наступне:
Ось висновок та пояснення коду:
Ця здатність викликати лямбди негайно дозволяє використовувати їх всередині функцій, таких як map () і redu (). Це корисно, тому що ви не можете захотіти використовувати ці функції знову. Функція фільтра використовується для вибору деяких конкретних елементів із послідовності елементів. Послідовність може бути будь-яким ітератором, таким як списки, множини, кортежі тощо. Д. Елементи, які будуть вибрані, базуються на певному обмеженні. Потрібно 2 параметри:
Ось висновок:
Пояснення коду:
1. У першому твердженні ми визначаємо список, який називають послідовностями, який містить кілька чисел.
2. Тут ми оголошуємо змінну з ім'ям Filter_result, яка зберігатиме відфільтровані значення, що повертаються функцією filter().
3. Лямбда-функція, яка запускається для кожного елемента списку та повертає значення true, якщо воно більше 4.
4. Роздрукуйте результат, який повертається функцією фільтра. функція map використовується застосування певної операції до кожного елементу в послідовності. Як і filter(), він також приймає 2 параметри: Наприклад, ось програма, яка друкує квадрати чисел у цьому списку: Функція Reduce, наприклад map(), використовується для застосування операції до кожного елемента у послідовності. Тим не менш, він відрізняється від карти у своїй роботі. Далі йдуть кроки, які виконує функція redu () для обчислення висновку:
Крок 1) Виконайте задану операцію на перших 2 елементах послідовності.
Крок 2) Збережіть цей результат
Крок 3) Виконайте операцію зі збереженим результатом та наступним елементом у послідовності.
Крок 4) Повторюйте, доки не залишиться більше елементів. Він також приймає два параметри: Наприклад, ось програма, яка повертає добуток всіх елементів у списку:
Ось висновок:
Як ви побачите в наступному розділі, лямбди обробляються так само, як і звичайні функції на рівні інтерпретатора. Однак, ви повинні знати, коли варто використовувати лямбди і коли їх уникати. Один з найпоширеніших варіантів використання лямбд – у функціональному програмуванні, оскільки Python підтримує парадигму (або стиль) програмування, відому як функціональне програмування. Це дозволяє вам надавати функцію як параметр іншої функції (наприклад, карті, фільтрі тощо. буд.). У таких випадках використання лямбда-виразу пропонує елегантний спосіб створення одноразової функції та передачі її як параметр. Ви ніколи не повинні писати складні лямбда-функції у виробничому середовищі. Кодерам, які підтримують ваш код, буде важко розшифрувати його. Якщо ви виявите, що робите складні однорядкові вирази, було б краще визначити правильну функцію. Рекомендується пам'ятати, що простий код завжди кращий за складний код. Як мовилося раніше, лямбды — це [vV4] [J5] просто функції, із якими пов'язаний ідентифікатор. Простіше кажучи, це функції без імен (отже, анонімні). Ось таблиця, щоб проілюструвати різницю між лямбдами та звичайними функціями в python.
Лямбда
Регулярні функції
Лямбда-функції можуть мати лише один вираз у своєму тілі. Регулярні функції можуть мати кілька виразів та операторів у своєму тілі. Лямбди немає імені, що з ними. Ось чому вони також відомі як анонімні функції. Звичайні функції повинні мати ім'я та підпис. Лямбди не містять оператора return, тому що тіло повертається автоматично. Функції, які мають повертати значення, повинні містити інструкцію повернення. Основна відмінність лямбда функції від звичайної функції полягає в тому, що лямбда функція обчислює тільки один вираз і видає об'єкт функції. Отже, ми можемо назвати результат лямбда-функції та використовувати його у нашій програмі, як ми це робили у попередньому прикладі. Звичайна функція для наведеного вище прикладу виглядатиме так: Тут ми маємо визначити ім'я для функції, яка повертає результат при його виклик . Лямбда-функція не містить оператора return, тому що вона матиме лише один вираз, який завжди повертається за умовчанням. Вам навіть не потрібно призначати лямбду, оскільки вона може бути негайно викликана (див. наступний розділ). Як ви побачите в наступному прикладі, лямбди стають особливо потужними, коли ми використовуємо їх із вбудованими функціями Python. Тим не менш, ви все ще можете поставити питання, чим лямбди відрізняються від функції, яка повертає єдиний вираз (як показано вище). На рівні перекладача немає великої різниці. Це може звучати напрочуд, але будь-яка лямбда-функція, яку ви визначаєте в Python, інтерпретатор інтерпретує як нормальну функцію. Як ви можете бачити на діаграмі, ці два визначення обробляються інтерпретатором Python однаково при перетворенні на байт-код. Тепер ви не можете назвати лямбда- функцію, тому що вона зарезервована Python, але будь-яке інше ім'я функції дасть той же байт-код [KR6]. [J5] Я додав таблицю, але розуміння відмінностей необхідно пояснення. [vV4] Помістіть цей розділ у таблицю fomat. Перегляньте це посилання: https://www.guru99.com/call-by-value-vs-call-by-reference.html додати додаткові пункти в цьому розділі. [J3] Це нижче пояснення [vV2] Зображення відсутнє у цьому розділі. [JP1] Не хочете, щоб зображення коду… просто вставте висновок у тег pre… робіть це скрізь [KR6] Додайте більше прикладів, тому що ми хочемо, щоб кількість слів була 2300+ Python lambdas – це невеликі, анонімні, суб-синтаксичні роботи, які більш обмежені, але коротші, ніж звичайні функції Python. У цій статті ми побачимо все про лямбду. Ми обговоримо та постараємося відповісти на наступне питання про лямбду: Лямбда - це концепція не тільки в Python, вона використовується в інших мовах програмування, таких як Java, C#, C++ тощо. буд. Концепція лямбда у мовах програмування вийшла з обчислювальної математики. Історія лямбда розпочалася ще у 30-х роках минулого століття. Алонзо Черч, найбільш відомий своїм лямбда-обчисленням, тезою Черча - Тьюринга, був американським математиком і логіком, який формалізував лямбда-обчислення. Функціональні мови беруть свій початок у математичній логіці та лямбда-обчисленні, тоді як ключові мови програмування використовують модель обчислень на основі станів, розроблену Аланом Тьюрінгом. Дві обчислювальні моделі, лямбда-обчислення та машини Тьюринга, можна перетворити на одну. Ця схожість відома як гіпотеза Черча-Тьюринга. Функціональні мови, такі як Haskell та Lisp, успадковують лямбда-числення, але такі мови, як Python або C, успадковують імперативне програмування. Спочатку Python не був функціональною мовою, але на пізніших етапах він приймає кілька функціональних концепцій. Я можу докладніше розповісти про історію лямбду, але це не є наша основна тема для обговорення. Отже, перейдемо до наступної теми. Функція Лямбда - це анонімні функції в Python. Лямбда функції схожі на звичайні функції. Різниця між звичайною функцією та лямбда-функцією полягає в тому, що вони можуть бути визначені без імені, але звичайні функції визначаються за допомогою ключового слова def. Ключове слово lambda використовується визначення анонімної чи лямбда-функции. Якщо ми порівняємо лямбда-функцію та звичайну функцію, то, У наведеному вище коді показана лямбда-функція, яка дає добуток двох змінних x та y. У наведеному вище прикладі x - це змінна, яка зберігатиме значення лямбда-вираження, що повертається. Частини лямбда-вираження. Ключове слово – лямбда. Ми можемо передати аргументи функції, уклавши функцію та її аргумент у круглі дужки: Нижче наведено приклад передачі аргументів в одному рядку. Ви також можете написати лямбду без імені змінної. Отже, ми зрозуміли, що лямбда-функцію можна писати без імені та змінної. Досі я викладав теоритичні відомості про лямбду, тому ми розберемося, як використовувати лямбду, за допомогою прикладів. Приклад 1 Напишіть програму для обчислення експонентів за допомогою лямбда-функції. Щоб вирішити наведений вище приклад, я створив дуже гарну візуалізацію, щоб зрозуміти процес. Ви можете вирішити це таким чином: Я взяв інші значення, але це не є проблемою. Тепер я хочу обговорити тут ще одну важливу річ. Лише небагато програмістів обговорюють це. Для цього я беру інший приклад. Спочатку знаємося на коді. Це тому, що сама лямбда повертає об'єкт функції. У наведеному вище прикладі лямбда просто повертає об'єкт функції та місце у пам'яті, де він зберігається. І висновок, який ми отримуємо на консолі, – це те місце. Тепер я зроблю деякі зміни, щоб отримати бажаний результат. Тепер я отримав те, що хочу від лямбда-виразу, але є ще один результат – «Ні». Тепер, коли я запускаю код, моя зовнішня функція друку намагається викликати лямбда-функцію, а внутрішня функція виклику змінює ім'я. Отже, внутрішній друк дає мені рядок, а зовнішній друк повертає об'єкт із лямбда-функції. Тепер він дає мені правильний результат, який мені потрібний обома способами. Подивіться, наскільки напруженим було це завдання – надрукувати оператор із використанням лямбду. Тут потрібно зрозуміти, коли використовувати лямбда, а коли уникати. Тепер я напишу той самий код із звичайною функцією. Як це просто? Отже, нам потрібно уникати лямбду для простих завдань та розуміти використання лямбду. Коли ми використовували лямбда-функцію, ми не використовували ім'я функції, і не було потреби явно викликати лямбда-функцію, тому лямбда називається анонімною функцією. Для звичайної функції ми визначаємо ім'я функції print_line, і там є тіло, але у випадку лямбда-функції тіла не було. То була одинарна лінія. Ось деякі моменти проти використання лямбда-функції в Python: Розуміння списків – найкраща альтернатива лямбда. У деяких випадках лямбда-вираз використовується з функціями map(), reduce() та filter(), але те ж саме може бути виконано з розумінням списку разом із циклом for. Тепер ви можете самі подумати, як і коли використовувати функції лямбди. Я сподіваюся, що ця стаття допоможе новачкові зрозуміти запровадження лямбду. У цій статті ви докладніше вивчите анонімні функції, також звані "лямбда-функції". Давайте розберемося, що це таке, який їхній синтаксис і як їх використовувати (з прикладами). Лямбда-функції Python є анонімними. Це означає, що функція безіменна. Як відомо, ключове слово def використовується в Python для визначення звичайної функції. У свою чергу ключове слово lambda використовується для визначення анонімної функції. Лямбда-функції можуть мати будь-яку кількість аргументів, але кожна може мати лише один вираз. Вираз обчислюється та повертається. Ці функції можуть бути використані скрізь, де потрібна функція об'єкта. У вказаному вище коді lambda x: x*2 — це лямбда-функція.Тут x - це аргумент, а x * 2 - це вираз, який обчислюється та повертається. Ця функція безіменна. Вона повертає функціональний об'єкт з ідентифікатором double. Тепер ми можемо вважати її нормальною функцією. Інструкція: Розглянемо приклад і спробуємо зрозуміти різницю між визначенням ( Def ) для звичайної функції та lambda -функції. Цей код повертає задане значення, зведене в куб: Як показано в прикладі вище, обидві представлені функції defined_cube() і lambda_cube() ведуть себе однаково, як і передбачалося. Розберемо вищезгаданий приклад докладніше: Ми використовуємо лямбда-функцію, коли нам ненадовго потрібна безіменна функція. У Python ми часто використовуємо їх як аргумент функції вищого порядку (функція, яка приймає інші функції як аргументи). Лямбда-функції використовують разом із такими вбудованими функціями як filter() , map() , reduce() та ін. Давайте розглянемо ще кілька найпоширеніших варіантів використання лямбда-функцій. Функція filter() в Python приймає як аргументи функцію і список . Функція викликається з усіма елементами списку, і в результаті повертається новий список, що містить елементи, для яких функція результує в True . Ось приклад використання функції filter() для відбору парних чисел зі списку. Функція map() приймає як аргументи функцію та список. Функція викликається з усіма елементами списку, і в результаті повертається новий список, що містить елементи, повернені даною функцією кожного вихідного елемента. Нижче наведено приклад використання функції map() для подвоєння всіх елементів списку. Функція reduce() приймає як аргументи функцію та список. Функція викликається за допомогою лямбда-функції та об'єкта, що ітерується, і повертається новий зменшений результат. Так виконується операція, що повторюється над парами об'єктів, що ітеруються. Функція reduce() входить до складу модуля functools . Тут результати попередніх двох елементів підсумовуються наступним елементом, і це триває до кінця списку, ось так: У цьому прикладі ми будемо використовувати лямбда-функцію зі списковим включенням та лямбда-функцію з циклом for . Ми виведемо на екран таблицю із 10 елементів. Давайте розглянемо використання умов if-else у лямбда-функції. Як ви знаєте, Python дозволяє нам використовувати однорядкові умови, і саме їх ми можемо поміщати в лямбда-функцію для обробки результату, що повертається. Наприклад, є дві цифри, і ви повинні визначити, яка з них є найбільшою кількістю. Цей метод дозволяє вам додавати умови до лямбда-функцій. Функції Лямбда не допускають використання кількох операторів, однак ми можемо створити дві лямбда-функції, а потім викликати другу лямбда-функцію як параметр для першої функції. Спробуємо знайти другий за величиною елемент, використовуючи лямбду. У попередньому прикладі ми створили лямбда-функцію, яка сортує кожен вкладений список у заданому списку. Потім цей список проходить як параметр для другої лямбда-функції, яка повертає елемент n-2 відсортованого списку, де n - довжина вкладеного списку. Тепер ви знаєте, як використовувати в Python lambda -функції і можете:29) Лямбда-функції Python
Лямбди в Python
Синтаксис та приклади
lambda p1, p2: expression
Приклад 1
adder = lambda x, y: x + y print (adder (1, 2))
Код Пояснення
Приклад 2
#What a lambda returns string='який малюнок з найнеобхіднішою lambda' print(lambda string : print(string))
at 0x00000185C3BF81E0>
Приклад 3
#What a lambda returns #2 x="котрий м'яч з найнеобхіднішої lambda" (lambda x : print(x))(x)
хтось м'яч useless lambda
Приклад 4
#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')
Використання лямбди із вбудованими Python
IIFE у Python Lambda
лямбди у фільтрі ()
sequences = [10,2,8,7,5,4,3,11,0, 1] filtered_result = filter (lambda x: x > 4, sequences) print(list(filtered_result))
лямбди на карті ()
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]
лямбди у зменшенні ()
з functools import reduce sequences = [1,2,3,4,5] product = reduce (lambda x, y: x*y, sequences) print(product)
Чому (і чому ні) використовувати лямбда функції?
Коли не слід використовувати лямбду?
Лямбда проти регулярних функцій
Пояснення відмінностей?
def adder (x, y): return x + y print (adder (1, 2))
Резюме
Функція Лямбда в Python
Звідки з'явилася лямбда
Що таке лямбда-функція
x = lambda x, y : x * y print (x (3,4))x = ( lambda x, y : x * y) (2,3) print (x)x = ( lambda x, y : x * y) (2,3) print (x)Як використовувати лямбда-функцію
Exp = (lambda x, y : x** y) (4,4) print(Exp)
Коли слід уникати лямбда-функції
Альтернативи лямбда
Лямбда-функція в Python простими словами
Лямбда-функція має наступний синтаксис.
Lambda аргументи: вираз1.1. Приклад лямбда функції.
double = lambda x: x*2 print(double(5))def double(x): return x * 2
2. Відмінність між звичайною функцією та лямбда-функцією
def defined_cube(y): return y*y*y lambda_cube = lambda y: y*y*y print(defined_cube(2)) print(lambda_cube(2))
3. Лямбда-функції та функції вищого порядку
3.1. Приклад з 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()
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()
з 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. Лямбда та спискове включення
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 1005. Лямбда та умовні оператори
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)Висновок