Olá Welton, tudo bem com você?
Peço desculpas pela demora no retorno.
O recurso de typing hint do Python não é um recurso de uso obrigatório da linguagem, seu uso é considerado como uma boa prática de programação, o código ficará mais verboso, mas com essas dicas de tipos termos um um auxílio para entendermos o que uma função ou atributo espera receber e o que ela retorna.
A sintaxe de uso da dica de tipo Callable
é a seguinte:
- Callable[[Tipo_de_entrada], Tipo_de_retorno]
Tomamos como exemplo o seguinte contexto: precisamos de uma função que será responsável por realizar uma soma a um número informado, nomeamos como soma
, essa função recebe um valor do tipo int
(numero) e retorna um valor do tipo int
. Temos:
def somar(numero: int) -> int:
return numero + 1
Agora, precisamos de uma função que irá receber um valor e recebe nossa função soma como parâmetro, e deverá chamar a função soma e multiplicar o resultado da soma por dois (2) e retornar um valor do tipo int
. Nesse momento temos:
def duas_vezes(numero: int, somar: Callable[[int], int]) -> int:
resultado = somar(numero) * 2
return resultado
No código acima estamos informando que o parâmetro somar
recebe um objeto do tipo Callable
, recebendo a função somar
e a função somar recebe um valor do tipo int
(numero) e retorna um valor do tipo int
. Fora isso, o retorno da função duas_vezes
será do tipo int
.
Juntando as duas funções temos
from typing import Callable
def somar(numero: int) -> int:
return numero + 1
def duas_vezes(numero: int, somar: Callable[[int], int]) -> int:
resultado = somar(numero) * 2
return resultado
print(duas_vezes(3, somar))
Resultado
8
Acima temos representado um dos modelos de uso da dica de tipo Callable
.
Você citou sobre Java e algo interessante é que a partir do Java 10 foi implementado uma nova declaração de tipo a Var
, fazendo o uso dela o tipo da variável será definida em tempo de compilação com base no código declarado a sua direita, apresentando uma semelhança ao sistema de tipagem dinâmica do Python. Seria um pythonista programando em Java? Hahahaha
Fico à disposição em caso de dúvidas.
Abraços e bons estudos.
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!