example aws python lambda

example - python lambda aws



¿Hay una manera de realizar "si" en lambda de python (10)

¿Por qué no solo define 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.

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 un if en lambda y, en caso afirmativo, cómo hacerlo?

Gracias


La sintaxis que estás buscando:

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

Pero no puedes usar print o raise en una 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


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)


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 sintaxis "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.


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


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)))


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 here


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

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