Рисунок 1: Фото Z S на Unsplash
Основы для Lambda
Lambda
это ключевое слово в Python, мы используем его для создания анонимной функции. Таким образом, мы также называем лямбда функции как анонимные функции.
Но каковы анонимные функции?
Нормальная функция определена так:
def sum_two(x, y): x + y print(sum_two) print(type(sum_two)) ##
Из результата, sum_two это имя определенной функции, его тип – «функция».
По сравнению с нормальной функцией, анонимная функция является функцией без имени:
print(lambda x, y: x + y) print(type(lambda x, y: x + y)) #at 0x108227f50> #
Преимущества лямбды
Но почему мы хотим функции без имени?
Потому что Наименование слишком чертовски сложнее ! Подумайте о том, сколько времени вы потратили на название (переменные, функции, классы), когда вы программируете.
На самом деле, не все функции заслужили имя.
Некоторые функции используются временно, и нам не нужны позже. Мы используем функцию Lambda для экономии времени для именования и получаем лучшую читаемость.
Предположим, нам нужно добавить 2 к каждому элементу в списке, вместо того, чтобы использовать нормальную функцию:
def add_2(x): return x + 2 lst = [3,5,-4,-1,0,-2,-6] map(add_2, lst)
Мы могли бы использовать Lambda
Чтобы закончить одни и те же вычисления в одной строке:
map(lambda x: x +2, lst)
Это простота. Мы можем написать функцию лямбды без хлопот.
Есть и другие функции, такие как фильтр
, уменьшить
, отсортировано
, они получают функцию лямбды в качестве параметров.
Ловушка лямбды
Цель Lambda функция
для улучшения читаемости кода. Поэтому, если логика функции не проста, мы не должны использовать лямбду.
Простое правило: Не используйте Lambda для функций, длина которых составляет более одной строки Анкет
Подумайте об этом фрагменте кода, не могли бы вы легко понять этот код?
f = lambda x: [[y for j, y in enumerate(set(x)) if (i >> j) & 1] for i in range(2**len(set(x)))]
Очевидно, этот код трудно понять. Намерение этого кода – получить все подмножества из установить
Анкет
a = {1, 2, 3} print(f(a)) # [[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]]
В этом случае мы должны использовать нормальную функцию с правильным именем:
def powerset(s): N = len(s) result = [] for i in range(2 ** N): combo = [] for j, y in enumerate(s): if (i >> j) % 2 == 1: combo.append(y) result.append(combo) return result print(powerset(a))
Пост Python: Плюсы и минусы лямбды появился первым на Кошка кодера Анкет
Оригинал: “https://dev.to/snj/python-pros-and-cons-of-lambda-5cj1”