Для человека без опыта работы в области компьютерных технологий, что такое лямбда в мире компьютерных наук?
Я проиллюстрирую это интуитивно шаг за шагом в простых и удобочитаемых кодах Python.
Короче говоря, лямбда - это просто анонимная и встроенная функция.
Давайте начнем с задания, чтобы понять lambdas
как новичка с основами арифметики.
План присвоения - «имя = значение», см .:
In [1]: x = 1
...: y = 'value'
In [2]: x
Out[2]: 1
In [3]: y
Out[3]: 'value'
'x', 'y' - это имена, а 1, 'value' - это значения.
Попробуйте функцию по математике
In [4]: m = n**2 + 2*n + 1
NameError: name 'n' is not defined
Сообщения об ошибках,
Вы не можете написать математику непосредственно как код, 'n' должно быть определено или присвоено значению.
In [8]: n = 3.14
In [9]: m = n**2 + 2*n + 1
In [10]: m
Out[10]: 17.1396
Теперь это работает, что если вы настаиваете на объединении двух отдельных строк в одну.
Приходит lambda
In [13]: j = lambda i: i**2 + 2*i + 1
In [14]: j
Out[14]: <function __main__.<lambda>>
Об ошибках не сообщается.
Это взгляд на lambda
, он позволяет вам записать функцию в одну строку, как вы делаете это в математике непосредственно в компьютер.
Мы увидим это позже.
Давайте продолжим копать глубже на «задании».
Как показано выше, символ равенства =
работает для простого типа данных (1 и «значение») и простого выражения (n ** 2 + 2 * n + 1).
Попробуйте это:
In [15]: x = print('This is a x')
This is a x
In [16]: x
In [17]: x = input('Enter a x: ')
Enter a x: x
Работает для простых операторов, в питоне их 11 типов 7. Простые утверждения - документация Python 3.6.3
Как насчет составного заявления,
In [18]: m = n**2 + 2*n + 1 if n > 0
SyntaxError: invalid syntax
#or
In [19]: m = n**2 + 2*n + 1, if n > 0
SyntaxError: invalid syntax
Приходит def
включите его
In [23]: def m(n):
...: if n > 0:
...: return n**2 + 2*n + 1
...:
In [24]: m(2)
Out[24]: 9
Тада, проанализируй это, 'm' - это имя, 'n ** 2 + 2 * n + 1' - это значение. :
- это вариант '='.
Найдите это, если только для понимания, все начинается с назначения, и все является назначением.
Теперь вернемся к lambda
, у нас есть функция с именем 'm'
Попробуйте:
In [28]: m = m(3)
In [29]: m
Out[29]: 16
Здесь есть два имени 'm', функция m
уже имеет дублированное имя.
Форматируется как:
In [27]: m = def m(n):
...: if n > 0:
...: return n**2 + 2*n + 1
SyntaxError: invalid syntax
Это не умная стратегия, поэтому сообщения об ошибках
Мы должны удалить одну из них, установить функцию без имени.
m = lambda n:n**2 + 2*n + 1
Это называется «анонимная функция»
В заключение
lambda
во встроенной функции, которая позволяет написать функцию в одну прямую линию, как в математике
lambda
является анонимным
Надеюсь, это поможет.