В тех случаях, когда у функции нет необязательных параметров, а её тело может быть записано в одну строчку,
существует другой способ записи функции:
Однако приведённый пример является анти-паттерном.
Лямбда функции предназначены для использования там,
где функция передаётся в качестве параметра и более нигде не используется.
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