15.12.2022 Views

Python Eficaz

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

são calculados apenas uma vez quando o módulo é carregado, o que

normalmente acontece na carga inicial do programa. Depois que o módulo

contendo o código é carregado, o argumento default datetime.now jamais será

recalculado.

A forma convencional de conseguir o efeito desejado em Python é definir o valor

default como None e documentar o comportamento completo na docstring

(consulte o Item 49: “Escreva docstrings para toda e qualquer função, classe e

módulo”). Quando seu código vir o valor None no argumento, o corpo da função

calcula localmente o valor default.

def log(message, when=None):

"""Log a message with a timestamp. 1

Args:

message: Message to print.

when: datetime of when the message occurred.

Defaults to the present time.

"""

when = datetime.now() if when is None else when

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

Agora os horários de cada mensagem serão diferentes.

log('Hi there!')

sleep(0.1)

log('Hi again!')

>>>

2014-11-15 21:10:10.472303: Hi there!

2014-11-15 21:10:10.573395: Hi again!

Usar None para o argumento é especialmente importante quando os argumentos

são mutáveis. Por exemplo, digamos que se queira carregar um valor codificado

em formato JSON. Se a decodificação do dado falhar, queremos que um

dicionário vazio seja devolvido por default. É uma técnica que alguns poderão

querer experimentar.

def decode(data, default={}):

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!