В тех случаях, когда у функции нет необязательных параметров, а её тело может быть записано в одну строчку,
существует другой способ записи функции:
Однако приведённый пример является анти-паттерном.
Лямбда функции предназначены для использования там,
где функция передаётся в качестве параметра и более нигде не используется.
foo = lambda ([параметры]): ([выражение])# Синонимdef foo([параметры]): return [выражение] |
Вообще, синтаксис лямбд достаточно полон, чтобы в одну строчку можно было реализовать вообще любую программу. Вместе с тернаным оператором условия лямбды позволяют делать совершенно нечитаемые работающие однострочники.
# Числа Фибоначчиprint(list(map(lambda x,f=lambda x,f:(f(x-1,f)+f(x-2,f)) if x>1 else 1:f(x,f), range(20))))>>> [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]# Факториалprint((lambda n,f:f(n,1,f))(20,(lambda n,m,f:m if n<=1 else f(n-1,m*n,f))))>>> 2432902008176640000# В некоторых случаях даже функции не нужны. Первые простые числаprint([x for x in range(2, 101) if all(x % i for i in range(2, int(x**0.5)+1))])>>> [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97] |
Последнее изменение: Суббота, 15 Август 2020, 02:35