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.

ideais para os ganchos porque são mais fáceis de descrever e mais simples de

definir que as classes. As funções trabalham como ganchos porque, em Python,

as funções são objetos de primeira-classe: métodos e funções podem ser

passados e referenciados a outros objetos como qualquer outro valor da

linguagem.

Por exemplo, digamos que se queira personalizar o comportamento da classe

defaultdict (consulte o Item 46: “Use algoritmos e estruturas de dados nativos”

para mais informações). Essa estrutura de dados permite fornecer uma função

que será chamada toda vez que uma chave faltante seja acessada. A função deve

retornar o valor-padrão que a chave faltante deva ter no dicionário. No exemplo

a seguir, é definido um gancho que registra no log sempre que uma chave não

puder ser encontrada e retorna o valor default 0 para ela:

def log_missing():

print('Key added')

return 0

Dado um dicionário inicial e um conjunto de incrementos, podemos usar a

função log_missing para rodar e imprimir duas vezes (para as chaves 'red' e

'orange').

current = {'green': 12, 'blue': 3}

increments = [

('red', 5),

('blue', 17),

('orange', 9),

]

result = defaultdict(log_missing, current)

print('Before:', dict(result))

for key, amount in increments:

result[key] += amount

print('After: ', dict(result))

>>>

Before: {'green': 12, 'blue': 3}

Key added

Key added

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!