Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Python

Лямбда-функции Python с ПРИМЕРАМИ

Что такое лямбда-функция в Python?

Лямбда-функция в Python программирование — это анонимная функция или функция, не имеющая имени. Это небольшая и ограниченная функция, состоящая не более чем из одной строки. Как и обычная функция, лямбда-функция может иметь несколько аргументов в одном выражении.

В Python лямбда-выражения (или лямбда-формы) используются для создания анонимных функций. Для этого вы будете использовать лямбда-выражение ключевое слово (так же, как вы используете def определить нормальные функции). Каждая анонимная функция, которую вы определяете в Python, будет состоять из трех основных частей:

Лямбда-функция может иметь любое количество параметров, но тело функции может содержать только один выражение. Более того, лямбда-выражение записывается в одну строку кода и также может быть вызвано немедленно. Вы увидите все это в действии в следующих примерах.

Из этого руководства по Lambda в Python вы узнаете:

Синтаксис и примеры

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

04

Здесь p1 и p2 — это параметры, которые передаются лямбда-функции. Вы можете добавить столько параметров, сколько вам нужно.

Однако обратите внимание, что мы не используем скобки вокруг параметров, как в случае с обычными функциями. Последняя часть (выражение) — это любое допустимое выражение Python, которое работает с параметрами, которые вы предоставляете функции.

Пример 1

Теперь, когда вы знаете о лямбда-выражениях, давайте попробуем это на примере. Итак, откройте IDLE и введите следующее:

13

Вот результат:

21

Пояснение кода

Здесь мы определяем переменную, которая будет содержать результат, возвращаемый лямбда-функцией.

1. Ключевое слово lambda, используемое для определения анонимной функции.

2. x и y — это параметры, которые мы передаем лямбда-функции.

3. Это тело функции, которая добавляет два переданных нами параметра. Обратите внимание, что это одно выражение. Вы не можете написать несколько операторов в теле лямбда-функции.

4. Мы вызываем функцию и печатаем возвращаемое значение.

Пример 2

Это был базовый пример для понимания основ и синтаксиса лямбда. Давайте теперь попробуем распечатать лямбду и посмотрим на результат. Снова откройте IDLE и введите следующее:

35


Теперь сохраните файл и нажмите F5, чтобы запустить программу. Это результат, который вы должны получить.

Вывод:

43

Что тут происходит? Давайте посмотрим на код, чтобы лучше понять.

Объяснение кода

  1. Здесь мы определяем строку, которую вы передадите в качестве параметра лямбда-выражению.
  2. Мы объявляем лямбду, которая вызывает оператор печати и печатает результат.

Но почему программа не печатает переданную нами строку? Это связано с тем, что сама лямбда возвращает объект функции. В этом примере лямбда не вызывается функцией печати, а просто возврат функциональный объект и место в памяти, где он хранится. Это то, что выводится на консоль.

Пример 3

Однако, если вы напишете такую ​​программу:

51

И запустите его, нажав F5, вы увидите такой вывод.

Вывод:

64

Теперь вызывается лямбда, и переданная нами строка выводится на консоль. Но что это за странный синтаксис и почему определение лямбда заключено в скобки? Давайте разберемся с этим сейчас.

Объяснение кода

  1. Это та же строка, которую мы определили в предыдущем примере.
  2. В этой части мы определяем лямбду и сразу же вызываем ее, передавая строку в качестве аргумента. Это то, что называется IIFE, и вы узнаете больше об этом в следующих разделах этого руководства.

Пример 4

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

76

Теперь сохраните файл и нажмите F5, чтобы запустить программу. Если вы не допустили ошибок, вывод должен быть примерно таким.

Вывод:

принтер 1 ОБЫЧНЫЙ ЗВОНОК

принтер 2 ОБЫЧНЫЙ ЗВОНОК

принтер 1 LAMBDA CALL

принтер 2 LAMBDA CALL

Объяснение кода

  1. Функция с именем guru, которая принимает другую функцию в качестве первого параметра и любые другие аргументы, следующие за ней.
  2. printer_one — это простая функция, которая печатает переданный ей параметр и возвращает его.
  3. printer_two аналогичен принтеру_one, но без оператора return.
  4. В этой части мы вызываем функцию гуру и передаем функции принтера и строку в качестве параметров.
  5. Это синтаксис для достижения четвертого шага (т. е. вызова функции гуру), но с использованием лямбда-выражений.

В следующем разделе вы узнаете, как использовать лямбда-функции с map(), уменьшить(), и фильтр() на Python.

Использование лямбда-выражений со встроенными модулями Python

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

IIFE в Python Lambda

ИИФЭ обозначает немедленное выполнение функции. Это означает, что лямбда-функцию можно вызывать, как только она определена. Давайте разберем это на примере; запустите IDLE и введите следующее:

83

Вот вывод и объяснение кода:

Эта возможность немедленного вызова лямбда-выражений позволяет вам использовать их внутри таких функций, как map() и reduce(). Это полезно, потому что вы можете не захотеть использовать эти функции снова.

лямбды в filter()

Функция фильтра используется для выбора определенных элементов из последовательности элементов. Последовательность может быть любым итератором, таким как списки, наборы, кортежи и т. д.

Элементы, которые будут выбраны, основаны на некоторых заранее определенных ограничениях. Он принимает 2 параметра:

Например,

93

Вот результат:

100 

Пояснение кода:

1. В первом операторе мы определяем список, называемый последовательностями, который содержит некоторые числа.

2. Здесь мы объявляем переменную с именем filtered_result, в которой будут храниться отфильтрованные значения, возвращаемые функцией filter().

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

<сильный>4. Распечатайте результат, возвращенный функцией фильтра.

лямбды в map()

функция карты используется для применения определенной операции к каждому элементу последовательности. Как и filter(), он также принимает 2 параметра:

  1. Функция, определяющая операцию, выполняемую над элементами.
  2. Одна или несколько последовательностей

Например, вот программа, которая печатает квадраты чисел в заданном списке:

118

Вывод:

123

[КР1]

Объяснение кода:

  1. Здесь мы определяем список, называемый последовательностями, который содержит некоторые числа.
  2. Мы объявляем переменную с именем filtered_result, в которой будут храниться сопоставленные значения.
  3. Лямбда-функция, которая работает с каждым элементом списка и возвращает квадрат этого числа.
  4. Распечатать результат, возвращенный функцией карты.

лямбды в функции reduce()

Функция редукции, как и map(), используется для применения операции к каждому элементу последовательности. Однако она отличается от карты по своей работе. Это шаги, за которыми следует функция reduce() для вычисления вывода:

Шаг 1) Выполните заданную операцию над первыми двумя элементами последовательности.

Шаг 2) Сохранить этот результат

Шаг 3) Выполните операцию с сохраненным результатом и следующим элементом последовательности.

Шаг 4) Повторяйте, пока не закончатся элементы.

Он также принимает два параметра:

  1. Функция, определяющая выполняемую операцию
  2. Последовательность (любой итератор, такой как списки, кортежи и т. д.)

Например, вот программа, которая возвращает произведение всех элементов списка:

137

Вот результат:

149

Объяснение кода:

  1. Импортировать сокращение из модуля functools
  2. Здесь мы определяем список, называемый последовательностями, который содержит некоторые числа.
  3. Мы объявляем переменную с именем product, в которой будет храниться уменьшенное значение.
  4. Лямбда-функция, которая выполняется для каждого элемента списка. Он вернет произведение этого числа в соответствии с предыдущим результатом.
  5. Выведите результат, возвращаемый функцией сокращения.

Зачем (и почему бы и нет) использовать лямбда-функции?

Как вы увидите в следующем разделе, лямбда-выражения обрабатываются так же, как и обычные функции на уровне интерпретатора. В некотором смысле можно сказать, что лямбда-выражения обеспечивают компактный синтаксис для написания функций, возвращающих одно выражение.

Однако вы должны знать, когда лучше использовать лямбда-выражения, а когда их следует избегать. В этом разделе вы узнаете о некоторых принципах проектирования, используемых разработчиками Python при написании лямбда-выражений.

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

Это позволяет вам предоставить функцию в качестве параметра другой функции (например, в карте, фильтре и т. д.). В таких случаях использование лямбда-выражений предлагает элегантный способ создания одноразовой функции и передачи ее в качестве параметра.

Когда не следует использовать Lambda?

Вы никогда не должны писать сложные лямбда-функции в производственной среде. Кодировщикам, которые поддерживают ваш код, будет очень сложно расшифровать его. Если вы обнаружите, что делаете сложные однострочные выражения, было бы гораздо лучше определить правильную функцию. Лучше всего помнить, что простой код всегда лучше сложного.

Лямбда-функции и обычные функции

Как указывалось ранее, лямбда-выражения — это [vV4][J5] просто функции, к которым не привязан идентификатор. Проще говоря, это функции без имен (следовательно, анонимные). Вот таблица, иллюстрирующая разницу между лямбда-выражениями и обычными функциями в Python.

Лямбды

Обычные функции

Синтаксис:

152

Синтаксис:

169

В теле лямбда-функций может быть только одно выражение.

Обычные функции могут иметь несколько выражений и инструкций в своем теле.

Лямбды не имеют имени, связанного с ними. Вот почему они также известны как анонимные функции.

Обычные функции должны иметь имя и подпись.

Лямбда-выражения не содержат оператора возврата, поскольку тело возвращается автоматически.

Функции, которые должны возвращать значение, должны включать оператор return.

Объяснение различий?

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

Обычная функция для приведенного выше примера будет выглядеть так:

172

Здесь мы должны определить имя для функции, которая возвращает результат, когда мы звоним Это. Лямбда-функция не содержит оператора возврата, потому что она будет иметь только одно выражение, которое всегда возвращается по умолчанию. Вам даже не нужно назначать лямбду, поскольку ее можно вызвать немедленно (см. следующий раздел). Как вы увидите в следующем примере, лямбда-выражения становятся особенно эффективными, когда мы используем их со встроенными функциями Python.

Однако вам все еще может быть интересно, чем лямбда-выражения отличаются от функций, возвращающих одно выражение (например, приведенное выше). На уровне интерпретатора особой разницы нет. Это может показаться удивительным, но любая лямбда-функция, которую вы определяете в Python, обрабатывается интерпретатором как обычная функция.

Как вы можете видеть на диаграмме, два определения обрабатываются интерпретатором python одинаково при преобразовании в байт-код. Теперь вы не можете назвать функцию лямбда. потому что оно зарезервировано Python, но любое другое имя функции даст тот же байт-код [KR6].

Обзор

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

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


Python

  1. Аргументы функции Python
  2. Анонимная/лямбда-функция Python
  3. Замыкания Python
  4. Перегрузка оператора C++ с примерами
  5. Функции C++ с примерами программ
  6. Оператор Python Print():как печатать с примерами
  7. Функция Python String strip() с ПРИМЕРОМ
  8. Количество строк Python() с ПРИМЕРАМИ
  9. Python String format() Объясните с ПРИМЕРАМИ
  10. Метод Python String find() с примерами