4.7.1 Default Argument Values

A forma mais útil é especificar um valor padrão para um ou mais argumentos. Isso cria uma função que pode ser chamada com menos argumentos do que é definida para permitir. Por exemplo:

def ask_ok(prompt, retries=4, complaint='Yes or no!'):
    while True:
        ok = raw_input(prompt)
        if ok in ('y', 'ye', 'yes'): return True
        if ok in ('n', 'no', 'nop', 'nope'): return False
        retries = retries - 1
        if retries < 0: raise IOError, 'refusenik user'
        print complaint

Esta função pode ser chamada assim: ask_ok (‘Do you really want to quit?’) Ou assim: ask_ok (‘Delete file?’, 2).Este exemplo também introduz a palavra-chave in. Isso testa se uma sequência contém ou não um determinado valor.Os valores padrão são avaliados no ponto de definição da função no escopo de definição, de modo que

i = 5
    
def f(arg=i):
    print arg
    
i = 6
f()

irá imprimir 5

Aviso importante: o valor padrão é avaliado apenas uma vez. Isso faz diferença quando o padrão é um objeto mutável, como uma lista, dicionário ou instâncias da maioria das classes. Por exemplo, a função a seguir acumula os argumentos passados para ela nas chamadas subseqüentes:

def f(a, L=[]):
    L.append(a)
    return L
    
print f(1)
print f(2)
print f(3)

Isso irá imprimir

[1]
[1, 2]
[1, 2, 3]

Se você não quiser que o padrão seja compartilhado entre chamadas subseqüentes, você pode escrever a função como esta:

def f(a, L=None):
    if L is None:
        L = []
    L.append(a)
    return L
Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s