15.12.2022 Views

Python Eficaz

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

O problema nesse código está na segunda chamada à função log, que usou o 7

como parâmetro message porque um não foi fornecido um argumento para

sequence. Bugs como esse são de difícil depuração porque o código funciona

sem levantar nenhuma exceção. Para evitar a ocorrência desse tipo de erro,

procure usar argumentos em palavras-chave quando quiser estender a

funcionalidade de funções que aceitem *args (consulte o Item 21: “Garanta a

legibilidade com argumentos por palavras-chave”).

Lembre-se

• As funções podem aceitar um número variável de argumentos posicionais

usando *args na definição da função com o comando def.

• Os itens em uma sequência podem ser usados como argumentos posicionais

em uma função com o operador *.

• Empregar o operador * com um gerador pode fazer com que o programa

esgote a memória e trave.

• Adicionar novos parâmetros posicionais a funções que aceitem *args pode

introduzir bugs difíceis de encontrar.

Item 19: Implemente comportamento opcional usando

palavras-chave como argumentos

Como a maioria das linguagens de programação, chamar uma função em Python

permite passar argumentos posicionais, ou seja, cuja atribuição à variável interna

correta depende da posição do valor na lista de argumentos.

def remainder(number, divisor):

return number % divisor

assert remainder(20, 7) == 6

Todos os argumentos posicionais em funções do Python podem ser também

passados por palavra-chave, no qual o nome do argumento é usado em uma

atribuição dentro dos parênteses da chamada à função. Os argumentos com

palavras-chave podem ser passados em qualquer ordem, desde que todos os

argumentos posicionais obrigatórios sejam especificados. Podemos misturar

argumentos posicionais e por palavra-chave à vontade. As chamadas mostradas a

www.full-ebook.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!