Для первого:
double dummy = 0;
целочисленный литерал 0
преобразуется в двойной с расширяющимся примитивным преобразованием, см. 5.1.2 Расширяющее примитивное преобразование в Java Спецификация языка. Обратите внимание, что это делается полностью компилятором, это никак не влияет на создаваемый байт-код.
Для остальных:
double dummy = 0.0;
double dummy = 0.0d;
double dummy = 0.0D;
Эти три абсолютно одинаковы - 0.0
, 0.0d
и 0.0D
- это всего лишь три разных способа написания литерала double
. См. 3.10.2 Литералы с плавающей точкой в JLS.
Синтаксис, который вы ищете:
lambda x: True if x % 2 == 0 else False
Но вы не можете использовать print
или raise
в лямбде.
почему бы вам просто не определить функцию?
def f(x):
if x == 2:
print(x)
else:
raise ValueError
в этом случае действительно нет оснований использовать лямбда.
Вы можете легко вызвать исключение в лямбде, если вы действительно этого хотите.
def Raise(exception):
raise exception
x = lambda y: 1 if y < 2 else Raise(ValueError("invalid value"))
Это хорошая идея? В общем, мой инстинкт - не использовать лямбды для сообщения об ошибках; пусть он имеет значение None и вызывает ошибку в вызывающей программе. Я не думаю, что это изначально зло - я считаю, что сам синтаксис «y if x else z» хуже - просто убедитесь, что вы не пытаетесь втиснуть слишком много в тело лямбда.
Лямбда-выражения в Python довольно ограничены в отношении того, что вам разрешено использовать. В частности, у вас не может быть никаких ключевых слов (кроме операторов типа и
, не
, или
и т. Д.) В их теле.
Итак, есть ни в коем случае вы не можете использовать лямбда в своем примере (потому что вы не можете использовать raise
), но если вы готовы уступить в этом… вы можете использовать:
f = lambda x: x == 2 and x or None