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.

inf

O problema é que é fácil confundir a posição dos dois argumentos booleanos que

controlam o comportamento que ignora as exceções. A obscuridade pode causar

bugs difíceis de encontrar e depurar. Uma maneira de melhorar a legibilidade

desse código é empregar argumentos por palavra-chave. Por default, a função

deve ser cautelosa e sempre levantar as exceções.

def safe_division_b(number, divisor,

ignore_overflow=False,

ignore_zero_division=False):

# ...

Os chamadores podem, opcionalmente, usar os argumentos por palavra-chave

para especificar qual dos casos especiais ativar, alterando o comportamentopadrão.

safe_division_b(1, 10**500, ignore_overflow=True)

safe_division_b(1, 0, ignore_zero_division=True)

Contudo, como o uso de argumentos por palavra-chave é opcional, não há nada

que obrigue os chamadores a usar as tais palavras-chave para mais clareza.

Mesmo com a nova definição de safe_division_b, ainda é possível empregar a

velha maneira de especificar posicionalmente os argumentos.

safe_division_b(1, 10**500, True, False)

Em funções complexas como esta, é melhor obrigar os chamadores a serem

claros em suas intenções. No Python 3, é possível exigir que o chamador

explique as coisas com mais clareza. Para isso, defina suas funções com

argumentos que funcionam apenas por palavra-chave. Argumentos definidos

dessa maneira só podem ser passados por palavra-chave, nunca por posição.

No exemplo a seguir, redefinimos a função safe_division para aceitar apenas

argumentos por palavra-chave. O símbolo * na lista de argumentos indica o fim

dos argumentos posicionais e o começo dos argumentos exclusivamente por

palavra-chave.

def safe_division_c(number, divisor, *,

ignore_overflow=False,

ignore_zero_division=False):

# ...

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!