Quiero usar sugerencias de tipo en mi proyecto actual de Python 3.5. Mi función debería recibir una función como parámetro.
¿Cómo puedo especificar la función de tipo en mis sugerencias de tipo?
import typing
def my_function(name:typing.AnyStr, func: typing.Function) -> None:
# However, typing.Function does not exist.
# How can I specify the type function for the parameter `func`?
# do some processing
pass
Revisé PEP 483 , pero no pude encontrar una pista de tipo de función allí.

CallableRespuestas:
Como @jonrsharpe señaló en un comentario, esto se puede hacer con
typing.Callable:El problema es que,
Callablepor sí solo, se traduce a loCallable[..., Any]que significa:Un invocable toma cualquier número de argumentos / tipo y devuelve un valor de cualquier tipo. En la mayoría de los casos, esto no es lo que desea, ya que permitirá que se pase casi cualquier función. Desea que se insinúen también los parámetros de función y los tipos de retorno.
Es por eso que muchos
typesdetypinghaber sido sobrecargado para el apoyo sub-secuencias de comandos que denota estos tipos adicionales. Entonces, si, por ejemplo, tuvo una funciónsumque toma dosintsy devuelve unint:Su anotación para ello sería:
es decir, los parámetros se subescriben en la suscripción externa con el tipo de retorno como el segundo elemento en la suscripción externa. En general:
fuente
typingmueve el lenguaje completo de Python a un nivel superior.Callable[[Arg, Types, Here], ...]para*args,**kwargs, args palabra clave única y sólo argumentos posicionales? ¿No han pensado en llamar a la convención en las firmas de tipo para las llamadas? ;)Otro punto interesante a tener en cuenta es que puede usar la función integrada
type()para obtener el tipo de función integrada y usarla. Entonces podrías tenerO algo de esa forma
fuente
builtin_function_or_methodcomomy_function? ¿No sería unlambdatrabajo? ¿Una función definida por el usuario o un método vinculado?