En Python, es posible crear un procedimiento que no tenga un retorno explícito. es decir .:Valores devueltos del procedimiento de Python
def test(val):
if 0 == val:
return 8
Además, es posible asignar los resultados de esa función a una variable:
>>> a = test(7)
>>> print `a`
'None'
Por qué diablos es eso? ¿Qué lógica de lenguaje está detrás de esa desconcertante decisión de diseño? ¿Por qué eso no solo genera un error de compilación?
EDITAR: Sí, me doy cuenta de que funciona de esa manera. Gracias. Mi pregunta es ¿POR QUÉ? Parece una forma segura de introducir errores sutiles en tu código. Y parece, como se menciona a continuación por e-satis, ir en contra del muy sabio adagio pitónico de que "lo explícito es mejor que lo implícito".
Entonces, ¿qué pasa con esto? ¿Es solo una supervisión del diseño o una suposición simplificadora o una decisión deliberada y considerada?
EDIT: ¿Están de acuerdo en que se exprese la intención de esta manera es mucho mejor:
def test(val):
if 0 == val:
return 8
else:
return None
Si es así, ¿por qué Python preferir el estilo anterior a elevar una excepción de tiempo de compilación?
EDIT: S.Lott trae el punto explícitamente (y otros lo hacen también, su parece más claro para mí) que este comportamiento es el resultado de que Python es un lenguaje dinámico y por lo tanto no puede verificar tiempo de compilación, el comportamiento de tiempo de ejecución del sistema.
Dado que no hay distinción entre los procedimientos (aquellas funciones que no devuelven ningún valor) y las funciones (las que sí lo hacen), no hay nada que aplicar en tiempo de compilación. Lo que significa que cuando llegamos al comportamiento en tiempo de ejecución, o bien tenemos una falla catastrófica en algunos casos (arrojamos una excepción) o fallamos silenciosamente asumiendo que el programador sabía lo que estaban haciendo y entendía el comportamiento predeterminado.
La manera pitónica es hacer lo último, la forma C-style es hacer lo primero.
Eso parece tener sentido como una buena razón para hacerlo de esa manera.
La justificación clara de S.Lott está enterrada en los comentarios a la respuesta aceptada, así que pensé que era mejor resumir aquí.
No acepto la respuesta por un tiempo para ver si S.Lott da una respuesta oficial. De lo contrario, le daré los puntos a SilentGhost.
creo que hay un 'retorno' al final de cada def. –
-1: ¿"supervisión del diseño"? ¿Por quién? ¿A toda la comunidad de Python que le gusta de esta manera? Eso parece más una acusación que una pregunta. –
El valor de retorno predeterminado de Ninguno es muy útil. Si tiene un caso en el que no lo desea, haga una excepción como la última línea de la función –