Subsecções

2.6.1 Sintaxe básica

A sintaxe geral para definir uma função é:

    def nome_funcao(arg_1, arg_2, ..., arg_n):
        #
        # bloco de código contendo corpo da função
        #
        return valor_de_retorno # retornar é opcional

O código da função, uma vez avaliado pelo interpretador, define um nome local. Os argumentos são valores fornecidos quando chamada a função, e que ficam disponíveis por meio de variáveis locais no corpo da função.

No exemplo abaixo, temos uma função que recebe uma lista de dicionários como parâmetro, e uma função que recebe um dicionário. A primeira itera pela lista recebida, e passa o elemento atual como argumento para a segunda.

    def imprime_cardapio (pratos):
        print "Cardapio para hoje\n"
        for p in pratos:
            imprime_prato(p)
        print "\nTotal de pratos: %d" % len(pratos)

    def imprime_prato(p)
      print "%s ........ %10.2f" % (p["nome"], p["preco"])

Ao ser interpretado, o código acima define dois nomes locais: imprime_cardapio e imprime_prato. Para que a função seja de fato executada, usamos este nome seguido dos argumentos passados entre parênteses:

    # defino dicionários descrevendo os pratos
    p1 = {"nome": "Arroz com brocolis", "preco": 9.90}
    p2 = {"nome": "Soja com legumes",   "preco": 7.80}
    p3 = {"nome": "Lentilhas", "preco": 4.80}
    lista_pratos = [p1, p2, p3]

    # e chamo uma função, passando os pratos como argumento
    imprime_cardapio(lista_pratos)

o que resulta na seguinte saída quando executado:

    Cardapio para hoje
    
        Arroz com brocolis ........... 9.90
          Soja com legumes ........... 7.80
                 Lentilhas ........... 4.80

    Total de pratos: 3

2.6.1.1 Retornando um valor

No exemplo acima, as funções não `retornam' valor algum, apenas exibindo informação. Para retornar um valor, basta usar a expressão return dentro da função. A primeira pergunta conceitual aqui seria `retornar para quem?'; a resposta direta é `para quem invocou a função'. Demonstrando por exemplos, a função abaixo:

    def bar(t):
        return "The rain in Spain falls mainly in the %s." % t

define um valor de retorno, que é uma string; ao chamar esta função com um argumento:

    a = bar("plains")

o código da função é avaliado e um valor, retornado, sendo armazenado na variável a (observe o uso do operador de atribuição seguido da chamada da função). Para visualizar o valor retornado, usamos a conveniente instrução print:

    >>> print a
    The rain in Spain falls mainly in the plains.

Dica: para retornar conjuntos de valores, basta retornar uma seqüência ou outro valor de tipo composto.