Альтернативой анонимной функции является неанонимная функция.Анонимная функция является анонимной только в том контексте, в котором она была определена.Но это не совсем анонимно, потому что тогда вы не сможете его использовать.
В Python вы создаете анонимные функции с помощью оператора lambda
.Например, вы можете сделать это:
output = mysort(input, lambda x: x.lastname)
Лямбда создаст функцию, но у этой функции нет имени в локальном пространстве, и ее собственное имя для себя - просто '<lambda>'
.Но если мы посмотрим на mysort
, это должно быть определено примерно так:
def mysort(input, getterfunc):
blahblahblah
Как мы видим здесь, в этом контексте функция вообще не является анонимной.У него есть имя getterfunc
.С точки зрения этой функции не имеет значения, является ли переданная функция анонимной или нет.Это работает так же хорошо, и является абсолютно эквивалентным во всех значимых отношениях:
def get_lastname(x):
return x.lastname
output = mysort(input, get_lastname)
Конечно, он использует больше кода, но он не медленнее или что-то в этом роде.Следовательно, в Python анонимные функции - не что иное, как синтаксический сахар для обычных функций.
По-настоящему анонимная функция будет
lambda x: x.lastname
Но так как мы не назначаем полученную функцию чему-либо, мы не получаем имя для функции, а затем мы не можемиспользуй это.Все действительно анонимные функции непригодны для использования.
По этой причине, если вам нужна функция, которая не может быть лямбда-выражением, сделайте ее обычной функцией.Он никогда не может быть анонимным каким-либо значимым образом, так зачем вообще делать его анонимным?Лямбды полезны, когда вам нужна небольшая однострочная функция, и вы не хотите тратить пространство на определение полной функции.То, что они анонимны, не имеет значения.