Что такое «лямбда» в Python? - PullRequest
5 голосов
/ 08 марта 2011

Я хочу знать, что именно lambda в питоне? и где и почему он используется. спасибо

Ответы [ 11 ]

7 голосов
/ 08 марта 2011

Лямбда - это скорее концепция или методика программирования, чем все остальное.

По сути, это идея, что вы получаете функцию (первоклассный объект в python), возвращаемую в результате другой функции вместо объекта или примитивного типа.Я знаю, это сбивает с толку.

Посмотрите этот пример из документации Python :

def make_incrementor(n):
  return lambda x: x + n
f = make_incrementor(42)
f(0)
>>> 42
f(1)
>>> 43

Так что make_incrementor создает функцию, которая использует n в своих результатах.У вас может быть функция, которая будет увеличивать параметр на 2, например:

f2 = make_incrementor(2)
f2(3)
>>> 5

Это очень мощная идея в функциональном программировании и функциональных языках программирования, таких как lisp & circuit.

Надеюсь, это поможет.

6 голосов
/ 08 марта 2011

Лямбды не являются анонимными функциями.Лямбды - это анонимные выражения .

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

Python не поддерживает анонимные функции.Для примеров языков, которые это делают, см. Javascript и Lua.

(Примечание. Правильно называть лямбда-выражения анонимными функциями в функциональных языках, где используется математическое определение «функции», но в процедурных языках словосовсем другое значение, чем в математике.)

2 голосов
/ 08 марта 2011

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

Пример кода (без лямбды):

def numSquared(num):
    return num**2

for i in range(1,11):
    print numSquared(i)

Пример кода (с лямбдой):

for i in range(1,11):
    print (lambda x: x**2)(i)

Хорошее обсуждение для начинающих lambda: DiveIntPython.org - Lambda

2 голосов
/ 08 марта 2011

Конструкция lambda является более коротким способом определения простой функции, которая вычисляет одно выражение.Оператор def может быть неудобным и сделать код длиннее, разбитым и трудным для чтения.Функции, созданные этими двумя функциями, практически одинаковы в том, как они работают, разница в том, что lambda ограничивается одним выражением, значение которого возвращается, и что def назначает имя функции и добавляет его клокальные переменные с тем же именем.Также lambda может использоваться непосредственно в выражении, в то время как def является оператором.

def f(x, y):
    return x + y

даст вам почти тот же результат, что и

f = lambda x, y: x + y

И вы можете использовать его непосредственно в выражении

g(5, 6, helper=lambda x, y: x + y)

, которое с def будет менее кратким

def helper_function(x + y):
    return x + y

g(5, 6, helper=helper_function)
2 голосов
/ 08 марта 2011

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

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

def first_element(x):
    return x[0]
my_list.sort(key=first_element)

или, намного более кратко, вы можете сделать:

my_list.sort(key=lambda x: x[0])
2 голосов
/ 08 марта 2011

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

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

map(lambda x: x * 2, thelist)

lambda также делает Curry более удобным.

1 голос
/ 08 марта 2011

Первая ссылка, возвращаемая поиском "python lambda", указывает на страницу , первые абзацы которой отвечают на ваш вопрос.Я мог бы скопировать и вставить содержимое, но я думаю, что это несправедливо:)

0 голосов
/ 10 июня 2018

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

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

lam = lambda x : x*2
print(lam(2))

# возвращает 4 Более подробную информацию вы можете найти в этой записи блога.http://friendlypython.herokuapp.com/2017/1/anonymous-function-lambda/ или здесь

0 голосов
/ 15 августа 2017

Лямбда может быть интуитивно интерпретирована как функция алгебры.

Предположим, что базовая алгебра у = х ** 2 + 1 если введено напрямую,

>>> y = x**2 + 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined

ошибка возникает и сообщает, что сначала нужно определить переменную 'x'. тем не менее, «х» неизвестно, как оно может быть предопределено.

Лямбда помогает:

python
>>> y = lambda x: x**2 + 1  # no errors reports
>>> y(3)
10

Это ядро ​​лямбды,

Это на языке программирования, чтобы написать встроенную функцию.

0 голосов
/ 08 марта 2011

lambda - анонимная функция, обычно используемая для чего-то быстрого, что требует вычислений.

Пример (используется в синтаксическом анализаторе команд LexYacc):

assign_command = lambda dictionary, command: lambda command_function: dictionary.setdefault(command, command_function)

Это декоратор. Поместите перед командой, которую мы получили бы от синтаксического анализатора LexYacc: @assign_command(_command_handlers, 'COMMAND')

По сути, это сборка скрипта Python из заданного языка LexYacc.

Или, немного проще:

`x = лямбда x: вернуть x> 0 и x & (x-1) == 0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...