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 sintaxis. ¿Es posible realizar una if
en lambda
y si es así cómo hacerlo?
Gracias
python
lambda
python-2.6
Chico
fuente
fuente
Respuestas:
La sintaxis que estás buscando:
Pero no puedes usar
print
oraise
en una lambda.fuente
if
en una lambda?" no "¿cuál es la mejor manera de escribir una lambda que devuelve True si un número es par?"¿Por qué no solo define una función?
realmente no hay justificación para usar lambda en este caso.
fuente
print
aún no es una función en 2.6. :)def
, generalmente es una muy mala idea (tm). Simplemente use undef
programa que los simples programadores mortales puedan leer, interpretar, comprender y mantener.Probablemente la peor línea de Python que he escrito hasta ahora:
Si x == 2 imprime,
si x! = 2 subes.
fuente
Puede plantear fácilmente una excepción en una lambda, si eso es lo que realmente quiere hacer.
¿Es esta una buena idea? Mi instinto en general es dejar el informe de error fuera de lambdas; deje que tenga el valor Ninguno y genere el error en la persona que llama. Sin embargo, no creo que esto sea intrínsecamente malo; considero que la sintaxis "y si x más z" en sí es peor, solo asegúrate de que no estás tratando de meter demasiado en un cuerpo lambda.
fuente
x = RaiseValueErrorOnNone(x)
, de nuevo, dependiendo del caso.Las lambdas en Python son bastante restrictivas con respecto a lo que se le permite usar. En concreto, no se puede tener ninguna palabra clave (excepto para los operadores como
and
,not
,or
, etc) en su cuerpo.Por lo tanto, no hay forma de que pueda usar una lambda para su ejemplo (porque no puede usar
raise
), pero si está dispuesto a aceptar eso ... Podría usar:fuente
tenga en cuenta que puede usar varios más ... declaraciones if en su definición lambda:
fuente
Si aún desea imprimir, puede importar el módulo futuro
fuente
También puede usar operadores lógicos para tener algo como un condicional
Puede ver más sobre operadores lógicos aquí
fuente
if
sintaxis siempre es preferible a esto. La forma obvia de verificar las condiciones.if
declaración, por lo que descubrí que esta no era una manera obvia .lo que necesitas exactamente es
ahora llame a la función de la manera que necesita
fuente
Este fragmento debería ayudarlo a:
fuente
El siguiente código de muestra me funciona. No estoy seguro si se relaciona directamente con esta pregunta, pero espero que ayude en otros casos.
fuente
Intentalo:
Fuera:
fuente
Una manera fácil de realizar un if en lambda es mediante la comprensión de la lista.
No puede generar una excepción en lambda, pero esta es una forma en Python 3.x para hacer algo parecido a su ejemplo:
Otro ejemplo:
devuelve 1 si M de lo contrario 0
fuente