Las anotaciones de funciones no son para un uso específico, se pueden usar para cualquier cosa.
Las herramientas se pueden escribir para extraer información de las anotaciones y hacer todo lo que quiera, incluso consultar tipos o generar documentación. Pero Python en sí no hace nada con la información. Podría utilizarlo para un propósito completamente diferente, es decir, para proporcionar una función que se invocará en el parámetro o para declarar una cadena de posibles valores de retorno.
Las anotaciones pueden ser cualquier objeto:
def somefunc(param1: "string annotation",
param2: 151631,
param3: any_object): -> "some information here":
y se puede recuperar los objetos usando:
print (somefunc.func_annotations)
{'param1': "string annotation",
'param2': 151631,
'param3': <object any_object>,
'return': "some information here"}
sugerencias de casos de uso proporcionadas por el PEP:
- Proporcionar escribir la información
- Tipo comprobar
- Vamos IDE muestran qué tipo de una función espera y devuelve
- sobrecarga de funciones/funciones genéricas
- puentes en lengua extranjera
- adaptación
funciones lógicas
- predicado
mapeo consulta
- base de datos
- Asignación de referencias de parámetros RPC
- Otra información
- Documentación para los parámetros y valores de retorno
Desde sintaxis de la función de anotación es demasiado nuevo, en realidad no es utilizada para ningún herramientas de producción.
Sugiero usar otros métodos para documentar eso. Yo uso epydoc para generar mi documentación, y se puede leer la información a escribir parámetros de cadenas de documentación:
def x_intercept(m, b):
"""
Return the x intercept of the line M{y=m*x+b}. The X{x intercept}
of a line is the point at which it crosses the x axis (M{y=0}).
This function can be used in conjuction with L{z_transform} to
find an arbitrary function's zeros.
@type m: number
@param m: The slope of the line.
@type b: number
@param b: The y intercept of the line. The X{y intercept} of a
line is the point at which it crosses the y axis (M{x=0}).
@rtype: number
@return: the x intercept of the line M{y=m*x+b}.
"""
return -b/m
Este ejemplo es de epydoc's website. Puede generar documentación en una variedad de formatos y puede generar buenos gráficos de sus clases y perfiles de llamadas.
¿Puede explicar en qué versión de Python se ha agregado esta sintaxis? –
Se ha verificado una implementación de referencia en la rama p3yk como revisión 53170: http://svn.python.org/view?rev=53170&view=rev –
http://www.python.org/dev/peps/pep-3107/targets python versión 3.0. – Zitrax