¿Hay una manera de realizar “si” en lambda de python

En Python 2.6 , quiero hacer:

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

Esto claramente no es la syntax. ¿Es posible realizar un if en lambda y si es así cómo hacerlo?

Gracias

La syntax que estás buscando:

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

Pero no puedes usar print o raise en una lambda.

¿Por qué no definas una función?

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

Realmente no hay justificación para usar lambda en este caso.

Probablemente la peor línea de python que he escrito hasta ahora:

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

Si x == 2 imprimes,

Si x! = 2 subes.

Puede crear fácilmente una excepción en un lambda, si eso es lo que realmente quiere hacer.

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

¿Es esta una buena idea? Mi instinto en general es dejar el informe de errores fuera de las lambdas; deje que tenga un valor de Ninguno y genere el error en la persona que llama. No creo que esto sea intrínsecamente malo, aunque considero que la syntax "y if x else z" es peor en sí misma. Solo asegúrate de que no estés tratando de meter demasiado en un cuerpo lambda.

Lambdas en Python es bastante restrictivo con respecto a lo que puedes usar. Específicamente, no puede tener palabras clave (excepto los operadores como and , not , or , etc.) en su cuerpo.

Entonces, no hay forma de que puedas usar un lambda para tu ejemplo (porque no puedes usar el raise ), pero si estás dispuesto a conceder eso … Podrías usar:

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

tenga en cuenta que puede usar varios más … si hay declaraciones en su definición de lambda:

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

Si aún desea imprimir puede importar el módulo futuro.

 from __future__ import print_function f = lambda x: print(x) if x%2 == 0 else False 

Lo que necesitas exactamente es

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

ahora llama a la función de la manera que necesites

 f(2) f(3) 

También puedes usar operadores lógicos para tener algo como un condicional

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

Puedes ver más sobre los operadores lógicos aquí

Este fragmento debería ayudarlo a:

 x = lambda age: 'Older' if age > 30 else 'Younger' print(x(40)) 

Siguiente código de ejemplo funciona para mí. No estoy seguro de si se relaciona directamente con esta pregunta, pero espero que ayude en otros casos.

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

Intentalo:

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

Afuera:

 True False