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.

• É possível detectar que o valor de entrada é um iterador (em vez de um

contêiner) verificando se uma dupla chamada a iter sobre o objeto produz o

mesmo resultado, que pode ser varrido passo a passo com a função nativa

next.

Item 18: Reduza a poluição visual com argumentos

opcionais

Aceitar opcionalmente parâmetros posicionais (comumente chamados de star

args ou argumentos estrelinhas em referência ao nome convencional do

parâmetro, *args) pode tornar a chamada à função mais clara e remover uma

grande quantidade de poluição visual.

Por exemplo, digamos que se queira armazenar em um log as informações de

depuração (debugging) de determinado sistema. Com um número fixo de

argumentos, seria preciso uma função que recebesse, na entrada, uma mensagem

em uma lista de valores.

def log(message, values):

if not values:

print(message)

else:

values_str = ', '.join(str(x) for x in values)

print('%s: %s' % (message, values_str))

log('My numbers are', [1, 2])

log('Hi there', [])

>>>

My numbers are: 1, 2

Hi there

Ter a obrigação de passar uma lista vazia quando não tivermos valores a registrar

é desajeitado e barulhento. Seria melhor simplesmente ignorar o segundo

argumento. Felizmente, isso pode ser feito no Python se prefixarmos o último

parâmetro posicional com *. O primeiro parâmetro, a mensagem de log, é

obrigatório, enquanto quaisquer argumentos posicionais subsequentes são

opcionais. O corpo da função não precisa ser modificado, apenas o chamador é

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!