Есть ли способ выполнить "if" в python lambda

В python 2.6 я хочу:

f = lambda x: if x==2 print x else raise Exception()
f(2) #should print "2"
f(3) #should throw an exception

Это явно не синтаксис. Возможно ли выполнить if в lambda, и если да, то как это сделать?

спасибо

Ответ 1

Синтаксис, который вы ищете:

lambda x: True if x % 2 == 0 else False

Но вы не можете использовать print или raise в лямбда.

Ответ 2

почему бы вам просто не определить функцию?

def f(x):
    if x == 2:
        print(x)
    else:
        raise ValueError

в этом случае нет оправдания использовать лямбда.

Ответ 3

Вероятно, самая худшая строка питона, которую я написал до сих пор:

f = lambda x: sys.stdout.write(["2\n",][2*(x==2)-2])

Если x == 2 вы печатаете,

если x!= 2 вы поднимаете.

Ответ 4

Вы можете легко создать исключение в лямбда, если это то, что вы действительно хотите сделать.

def Raise(exception):
    raise exception
x = lambda y: 1 if y < 2 else Raise(ValueError("invalid value"))

Это хорошая идея? Мой инстинкт вообще заключается в том, чтобы оставить сообщение об ошибке из лямбда; пусть оно имеет значение None и вызывает ошибку в вызывающем абоненте. Я не думаю, что это по своей сути является злом, но я считаю, что синтаксис "y if x else z" хуже - просто убедитесь, что вы не пытаетесь слишком сильно задевать тело лямбда.

Ответ 5

Lambdas на Python являются довольно ограничительными в отношении того, что вам разрешено использовать. В частности, у вас не может быть ключевых слов (кроме операторов типа and, not, or и т.д.) В их теле.

Итак, вы не можете использовать лямбда для своего примера (потому что вы не можете использовать raise), но если вы согласитесь согласиться с этим... Вы могли бы использовать:

f = lambda x: x == 2 and x or None

Ответ 6

Заметьте, что вы можете использовать несколько других команд if... в вашем определении лямбда:

f = lambda x: 1 if x>0 else 0 if x ==0 else -1

Ответ 7

Если вы все еще хотите распечатать, вы можете импортировать будущий модуль

from __future__ import print_function

f = lambda x: print(x) if x%2 == 0 else False

Ответ 8

что вам нужно именно

def fun():
    raise Exception()
f = lambda x:print x if x==2 else fun()

теперь вызываем функцию так, как вам нужно

f(2)
f(3)

Ответ 9

Вы также можете использовать логические операторы, чтобы иметь что-то вроде условного

func = lambda element: (expression and DoSomething) or DoSomethingIfExpressionIsFalse

Вы можете увидеть больше о логических операторах здесь

Ответ 10

Этот фрагмент должен помочь вам:

x = lambda age: 'Older' if age > 30 else 'Younger'

print(x(40))

Ответ 11

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

a = ''.join(map(lambda x: str(x*2) if x%2==0 else "", range(10)))

Ответ 12

Попытайся:

is_even = lambda x: True if x % 2 == 0 else False
print(is_even(10))
print(is_even(11))

Из:

True
False