2013-02-12 2 views
3

В python, как вы можете написать функцию лямбда, взяв несколько строк. Я попыталсяКак написать python лямбда с несколькими строками?

d = lambda x: if x: 
       return 1 
       else 
       return 2 

, но я получаю сообщение об ошибке ...

+6

Если вы давая ему имя, просто используйте правильную инструкцию 'def'. – JBernardo

ответ

12

Используйте def вместо этого.

def d(x): 
    if x: 
     return 1 
    else: 
     return 2 

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

Даже тогда, если вы назначаете его имени, я всегда буду использовать def над lambda. lambda - это действительно хорошая идея при определении коротких функций key, например, для использования с sorted(), так как они могут быть встроены в вызов функции.

Обратите внимание, что в вашем случае трёхмерный оператор выполнит задание (lambda x: 1 if x else 2), но я предполагаю, что это упрощенный случай.

(в качестве кода для гольфа ноты, это также может быть сделано меньше кода, как lambda x: bool(x)+1 - конечно, это весьма нечитаемым, и плохая идея.)

+4

Для нечитаемого соревнования по гольфу мне нравится лучше '- ~ bool (x)', но имеет тот же самый счетчик символов :) – JBernardo

+1

@JBernardo Вот я думал, что это было так же нечитаемо, как и собиралось. Шляпы к тебе сэр. –

2

Вот правильный вариант того, что вы пытаетесь сделать:

d = lambda x: 1 if x else 2 

Но я не уверен, почему вы хотите это сделать.

4

lambda конструкт в Python является limited to an expression only, никаких заявлений не допускается

Сохраняя упомянутое выше ограничение, вы можете написать выражение с несколькими линиями с помощью обратной косой полукокса, конечно:

>>> fn = lambda x: 1 if x \ 
        else 2 
>>> fn(True) 
>>> 1 
>>> fn(False) 
>>> 2 
Смежные вопросы