постоянная лямбда-функция в питоне - PullRequest
1 голос
/ 16 декабря 2011

Как мне определить постоянную лямбда-функцию в python?

Мне это нужно для оценки выражений типа

lam (array[1,2,3,4,5])

Сейчас я использовал

lam = lambda t: 1 + t*0 

Это работает, но слишком ли это расточительно?

Ответы [ 4 ]

5 голосов
/ 16 декабря 2011

если вы просто хотите иметь функцию, которая возвращает то же самое, независимо от того, с какими аргументами она вызывается, это нормально.Вы никоим образом не обязаны использовать любые ваши аргументы.

В Python lambda - это функция без имени (и некоторых других, не связанных ограничений)

Если вы собираетесь взять лямбда-выражение и немедленно присвоить его возвращаемое значение переменной, вы даете функции имя.Не делайте этого, просто определите обычную функцию.Вы должны обращаться к лямбде, когда вам нужно передать функцию другой функции, и функция, которую вы хотите использовать, мала и даже не заслуживает имени (например, когда она всегда возвращает 1).В Python есть несколько таких «функций высокого порядка» (функции, которые принимают другие функции в качестве аргументов), map, filter и reduce находятся во встроенном пространстве имен.

#never!
always_return_one = lambda ignored_argument: 1

#OK: functions with names are def'ed not lambda'd
def always_return_one(ignored_argument):
    return 1

#Also OK: pass the lambda to another function as soon as you spell it.
modified_list = some_highorder_function(lambda ignored: 1, [1, 2, 3, 4, 5])

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

modified_list = [1 for ignored in [1, 2, 3, 4, 5]]

, который читается немного легче и последовательно быстрее !

3 голосов
/ 08 января 2014

Обычно используется _ для неиспользуемых аргументов

lam = lambda _: 1
2 голосов
/ 16 декабря 2011

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

lam = lambda t: 1
1 голос
/ 16 декабря 2011

как насчет просто:

[1] * len(array)
...