¿Es posible escribir una statement de retorno de una sola línea con la instrucción if?

Es posible volver desde un método en una sola línea en python

Buscando algo como esto

return None if x is None 

Intentado arriba, y es syntax inválida

Yo podría hacer fácilmente:

 if x is None: return None 

Pero solo es curioso si puedo combinar arriba la statement if en una sola línea

Es posible escribir una statement estándar “if” en una sola línea:

 if x is None: return None 

Sin embargo, la guía de estilo pep 8 recomienda no hacer esto:

Las declaraciones compuestas (declaraciones múltiples en la misma línea) generalmente no se recomiendan

Sí, se llama expresión condicional :

 return None if x is None else something_else 

Necesitas else something en un condicional para que funcione.

Descargo de responsabilidad: en realidad no hacer esto. Si realmente quieres una sola línea, entonces como nakedfanatic dice, simplemente rompe la regla de oro de PEP-8. Sin embargo, ilustra por qué el return no se comporta como pensabas, y cómo se vería es que se comporta como pensaste que podría ser el return .

La razón por la que no puede decir return None if x is None , es que el return introduce una statement, no una expresión. Por lo tanto, no hay forma de paréntesis (return None) if x is None else (pass) , o lo que sea.

Eso está bien, podemos arreglar eso. Escribamos una función ret que se comporte como return excepto que es una expresión en lugar de una statement completa:

 class ReturnValue(Exception): def __init__(self, value): Exception.__init__(self) self.value = value def enable_ret(func): def decorated_func(*args, **kwargs): try: return func(*args, **kwargs) except ReturnValue as exc: return exc.value return decorated_func def ret(value): raise ReturnValue(value) @enable_ret def testfunc(x): ret(None) if x is None else 0 # in a real use-case there would be more code here # ... return 1 print testfunc(None) print testfunc(1) 

También puedes probar la expresión de la list[bool] :

 return [value, None][x == None] 

Ahora, si el segundo corchete se evalúa como verdadero, de lo contrario se devuelve Ninguno, se devuelve el valor que desea devolver