As funções integradas como abs(), pow() e max(), produziram resultados. Chamar cada uma dessas funções gera um valor, que normalmente atribuímos a uma variável ou usamos como parte de uma expressão.

 

o_maior = max(3, 7, 2, 5)

x = abs(3 - 11) + 10


Neste capítulo, vamos escrever funções que retornam valores. O primeiro exemplo é área, que retorna a área de um círculo com o raio fornecido:


 

def area(raio):

    temp = 3.14159 * raio**2

    return temp

 


Já vimos a instrução de retorno antes, mas em uma função frutífera, a instrução de retorno inclui um valor de retorno. Esta instrução significa: Retorne imediatamente desta função e use a seguinte expressão como um valor de retorno. A expressão fornecida pode ser arbitrariamente complicada, então poderíamos ter escrito esta função de forma mais concisa:


 

def area(raio):

    return 3.14159 * raio**2


Por outro lado, variáveis temporárias como temp geralmente tornam a depuração mais fácil. Às vezes, é útil ter várias instruções de retorno, uma em cada ramificação de uma condicional. Já vimos o abdômen integrado, agora vemos como escrever o nosso próprio:

 

def valor_absoluto(x):

    if x < 0:

        return -x

    else:

        return x

 


Como essas instruções de retorno estão em uma condição alternativa, apenas uma será executada. Assim que um é executado, a função termina sem executar nenhuma instrução subsequente. Outra maneira de escrever a função acima é omitir o else e apenas seguir a condição if pela segunda instrução de retorno.


 

def valor_absoluto(x):

    if x < 0:

        return -x

    return x

 


Pense nesta versão e se convença de que ela funciona igual à primeira. O código que aparece após uma instrução de retorno, ou qualquer outro lugar que o fluxo de execução nunca pode alcançar, é chamado de código morto.


Em uma função frutífera, é uma boa ideia garantir que todos os caminhos possíveis através do programa cheguem a uma instrução de retorno. A seguinte versão de valor_absoluto não consegue fazer isso:


 

def valor_absoluto(x):

    if x < 0:

        return -x

    elif x > 0:

        return x

 


Esta versão não está correta porque se x for 0, nenhuma das condições é verdadeira e a função termina sem atingir uma instrução de retorno. Nesse caso, o valor de retorno é um valor especial chamado None:

 

def valor_absoluto(x):

    if x < 0:

        return -x

    elif x > 0:

        return x

 

print(valor_absoluto(0)) # None

 


None é o valor único de um tipo chamado NoneType.

Todas as funções Python retornam None sempre que não retornam outro valor.