Шаг 42.
Python: тонкости программирования. Эффективные функции. Лямбды - это функции одного выражения. А может, не надо...

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

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

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

    Например, делать что-то подобное для экономии пары строк кода просто глупо. Несомненно, технически все работает, и это вполне приличный "трюк". Но он порядочно смутит очередного специалиста, который в жесткие сроки должен отправить багфикс:

#  Вредно:
>>> class Car:
	кev = lambda self: print('Бум')
	crash = lambda self: print('Бац!')

	
>>> my_car = Car()
>>> my_car.crash()
Бац!

    Похожие чувства вызывают запутанные конструкции map() и filter() с использованием лямбд. Обычно гораздо лучше использовать конструкцию включения в список или в выражение-генератор:

#  Вредно:
>>> list(filter(lambda x: x % 2 == 0, range(16)))
[0, 2, 4, 6, 8, 10, 12, 14]
#  Лучше:
>>> [x for x in range(16) if x % 2 == 0]
[0, 2, 4, 6, 8, 10, 12, 14]

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

    В конечном счете экономия нескольких нажатий клавиш не будет иметь значения, зато ваши коллеги (и вы сами в будущем) оценят чистый и удобочитаемый код больше, чем лаконичное колдовство.

    На следующем шаге мы рассмотрим подведем итог по изученному материалу.




Предыдущий шаг Содержание Следующий шаг