Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Panic0 en 25 Mayo 2021, 17:27 pm



Título: Para que sirve esto? (Python)
Publicado por: Panic0 en 25 Mayo 2021, 17:27 pm
Hola, e visto que en muchos foros al momento de hacerse una función (o método en class), se usa "-> None", alguien me puede explicar para que sirve esto?






Gracias =)


Título: Re: Para que sirve esto? (Python)
Publicado por: engel lex en 25 Mayo 2021, 17:31 pm
se usa para indicar el tipo de retorno de la función, sin embargo es meramente documental en el sentido que no cambia nada, si lo pones o lo quitas es opcional y el comportamiento del programa no variará (algunos validadores de código podrían detectar si el resultado cumple las condiciones exitosamente)


Título: Re: Para que sirve esto? (Python)
Publicado por: DtxdF en 25 Mayo 2021, 18:32 pm
Hola @Panic0

Se llaman sugerencias o concretamente hinting. Como menciona engel lex, son simplemente para indicar lo que debería retornar, y mejoran significativamente la calidad del código.

Pero Python los ignora, ya que si tenemos lo siguiente:

Código
  1. #!/usr/local/bin/python3.7
  2.  
  3. def foo() -> int:
  4.    return "1"
  5.  
  6. if __name__ == "__main__":
  7.    val = foo()
  8.    print(type(val), val)

Se retornaría sin ningún inconveniente, pero lo ideal sería especificar el tipo de dato que en verdad vamos a generar (el cual sería str). No obstante, podría haber algún tipo de condición dentro de la función que permitiera no retornar nada (None) cuando no se cumpla o podría retornar cuando pase todo lo contrario, entonces el retorno sería opcional. Ahí entraría la librería typing (https://docs.python.org/3/library/typing.html) para realizar sugerencias más potentes.

Código
  1. #!/usr/local/bin/python3.7
  2.  
  3. from typing import Optional
  4.  
  5. def foo(x: int) -> Optional[int]:
  6.    if (x > 0):
  7.        return x
  8.  
  9. if __name__ == "__main__":
  10.    val = foo(0)
  11.    print(type(val), val)

Lo siguiente imprimiría "<class 'NoneType'> None" porque el número no es mayor a 0.

Aunque Python lo ignore, es muy útil cuando está creando una librería, ya que cuando se usa la función help(...) dentro de la consola misma de Python, le mostraría al usuario qué debería retornar o qué debería pasarse en los argumentos.

También le podría interesar:

*.- https://www.python.org/dev/peps/pep-0585

~ DtxdF


Título: Re: Para que sirve esto? (Python)
Publicado por: Panic0 en 25 Mayo 2021, 21:12 pm
Muchísimas gracias!