Python поддерживает интересный синтаксис, позволяющий определять небольшие однострочные функции на лету. Позаимствованные из Lisp, так назыаемые lambda-функции могут быть использованы везде, где требуется функция.
Пример 2.21. lambda-функции
>>> def f(x): ... return x*2 ...
>>> f(3) 6 >>> g = lambda x: x*2
>>> g(3) 6 >>> (lambda x: x*2)(3)
6
Эта lambda-функция делает то же самое, что и обычная функция, определенная выше. Обратите внимание на сокращенный синтаксис: список аргументов записывается без скобок и ключевое слово return
отсутствует (оно подразумевается, так как тело функции может содержать только одно выражение). Кроме того, функция не имеет имени, но может быть вызвана через переменную, которой она присвоена. | |
Вы можете использовать lambda-функцию даже не присваивая ее переменной. Это не самый полезный пример, но он показывает, что lambda-функция может быть определена прямо в месте ее использования. |
Обобщая, lambda-функция — это функция, которая имеет произвольное число аргументов (включая ) и возвращает значение одного выражения. lambda-функции не могут содержать инструкций или более одного выражения. Не пытайтесь втискивать в lambda-функцию слишком много. Если вам необходимл что-либо более сложное — определите обычную функцию.
![]() | |
Использование lambda-функций — дело стиля. Везде, где вы можете использовать lambda-функцию, вы также можете определить и использовать обычную функцию. Я их использую в местах, где нужно инкапсулировать характерный код, не подлежащий повторному использованию, без замусоривания программы множеством маленьких однострочных функций. |
Пример 2.22. lambda-функции в apihelper.py
processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)
Здесь следует обратить внимание на несколько вещей. Во-первых, мы используем простую форму приема с . В данном случае это оправданно, так как lambda-функция всегда является истиной (но это не означает, что lambda-функция не может возвращать значение, являющееся ложью; функция всегда является истиной, не зависимо от возвращаемого значения).