1
resposta

Documentando funções - Dica para tipos de

Oi pessoal, vi que dá deixar o "type hint" no retorno da função media também como tipo "tuple" e não somente como "float".

No primeiro caso para a função media, o type hint de retorno está corretamente declarado como float.

def media(lista: list) -> float:
    calculo = sum(lista) / len(lista)
    return calculo

O que torna esse resultado possível é o cálculo da média realizado pela operação:

"sum(lista) / len(lista)"

...onde os argumentos das funções "sum()" e "len()" sendo do tipo float ou inteiro, o resultado sempre será um float.

Veja um exemplo:

5 / 2 → 2.5

O valor retornado no calculo é, portanto, um float.


Mas, quando se deseja mais informações, como, por exemplo, o tamanho (comprimento) dos dados de saída, podemos definir o "type hint" assim:

def media(lista: list) -> tuple[float, int]:
    return sum(lista)/len(lista), len(lista)

Quando o type hint é defindo dessa forma, uma coleção de valores podem ser retornados da função.

notas = [9.0, 8.7, 6.8, 9.5, 10.0, 7.5]

def media(lista: list) -> tuple[float, int]:
    return sum(lista)/len(lista), len(lista)

# Chamada da função e impressão do resultado
resultado = media(notas)
print(f"Média: {resultado[0]:.2f}, Quantidade: {resultado[1]}")

Saída:

Média: 8.58, Quantidade: 6


Na função:

def media(lista: list) -> tuple[float, int]:
    return sum(lista)/len(lista), len(lista)

O retorno tá trazendo "-> tuple[float, int]" onde...

sum(lista)/len(lista) retorna a média (float), e...

len(lista) retorna o comprimento da lista com a quantidade de notas calculadas.


No final, pra completar o entendimento basta inserir um docstring para descrever a lógica do código.

notas = [9.0, 8.7, 6.8, 9.5, 10.0, 7.5]

def media(lista: list) -> tuple[float, int]:
    """
    Calcula a média aritmética dos valores em uma lista e retorna também a quantidade de elementos.

    Args:
        lista (list): Lista contendo números (int ou float).

    Returns:
        tuple[float, int]:
            - O primeiro valor é a média aritmética dos elementos (float).
            - O segundo valor é a quantidade de elementos na lista (int).

    Example:
        >>> media([9.0, 8.7, 6.8, 9.5, 10.0, 7.5])
        (8.75, 6)
    """
    return sum(lista) / len(lista), len(lista)

# Chamada da função e impressão do resultado
resultado = media(notas)
print(f"Média: {resultado[0]:.2f}, Quantidade: {resultado[1]}")

/
/
Eu achei bem interessante esse procedimento, espero que desperte a curiosidade em outras pessoas pra também se aprofundar nesse tópico.

1 resposta

Oi, Aristóteles! Como vai?

Agradeço por compartilhar

Gostei da sua contribuição sobre o uso de type hint para indicar quando a função retorna mais de um valor. A diferença entre -> float e -> tuple[float, int] ficou bem clara no seu exemplo: quando a função retorna apenas a média, o retorno é um número decimal; quando retorna a média e a quantidade de elementos, temos uma tupla com dois valores.

Sua explicação pode ajudar outras pessoas a perceberem que as anotações de tipo deixam o código mais legível e facilitam a manutenção. Dica: ao usar tuple[float, int], vale sempre reforçar na docstring a ordem dos valores retornados, como você fez, para evitar confusão na hora de acessar resultado[0] e resultado[1].

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!