В 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
и если да , то как это сделать?
Спасибо
python
lambda
python-2.6
парень
источник
источник
Ответы:
Синтаксис, который вы ищете:
Но вы не можете использовать
print
илиraise
в лямбду.источник
if
в лямбде?" а не "как лучше написать лямбду, которая возвращает True, если число четное?"почему бы вам просто не определить функцию?
в этом случае нет оправдания использованию лямбды.
источник
print
еще не является функцией в 2.6. :)def
- обычно является очень плохой идеей (тм). Просто используйтеdef
так, чтобы простые смертные программисты могли читать, интерпретировать, понимать и поддерживать это.Вероятно, худшая строка на Python, которую я написал до сих пор:
Если х == 2 вы печатаете,
если х! = 2 вы повышаете.
источник
Вы можете легко вызвать исключение в лямбде, если вы действительно этого хотите.
Это хорошая идея? В общем, мой инстинкт состоит в том, чтобы оставить лямбда-сообщения об ошибках; пусть оно имеет значение None и выдает ошибку в вызывающей стороне. Я не думаю, что это изначально зло, хотя я считаю, что сам синтаксис «у, если х иначе z» хуже, - просто убедитесь, что вы не пытаетесь слишком много вставить в лямбда-тело.
источник
x = RaiseValueErrorOnNone(x)
опять же в зависимости от случая.Лямбды в Python довольно ограничительны в отношении того, что вам разрешено использовать. В частности, вы не можете иметь какие - либо ключевые слова (за исключением операторов нравится
and
,not
,or
и т.д.) в их теле.Таким образом, вы не могли бы использовать лямбду для своего примера (потому что вы не можете использовать
raise
), но если вы готовы признать это ... Вы можете использовать:источник
обратите внимание, что вы можете использовать несколько других ... if операторов в вашем лямбда-определении:
источник
Если вы все еще хотите распечатать, вы можете импортировать будущий модуль
источник
Вы также можете использовать логические операторы, чтобы иметь что-то вроде условного
Вы можете увидеть больше о логических операторах здесь
источник
if
синтаксис всегда предпочтительнее этого. Очевидный способ проверки условий.if
утверждение, поэтому я нашел это неочевидным способом.что вам нужно именно
теперь вызываем функцию так, как вам нужно
источник
Этот фрагмент должен помочь вам:
источник
Следующий пример кода работает для меня. Не уверен, имеет ли это прямое отношение к этому вопросу, но надеюсь, что это поможет в некоторых других случаях.
источник
Попробуй это:
Вне:
источник
Самый простой способ выполнить if в лямбде - использовать понимание списка.
Вы не можете вызвать исключение в лямбде, но в Python 3.x это способ сделать что-то похожее на ваш пример:
Другой пример:
вернуть 1, если M в противном случае 0
источник