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.

paralelismo real”), mas ao fato de que seu código talvez não esteja usando os

melhores algoritmos e estruturas de dados possíveis.

Felizmente, a biblioteca-padrão do Python oferece muitos dos algoritmos e

estruturas de dados que usaremos em todos os nossos programas, e são todos

nativos. Além do ganho em velocidade que isso acarreta, esses algoritmos e

estruturas de dados comuns podem tornar sua vida bem mais fácil. Algumas das

ferramentas mais valiosas que gostaríamos de usar podem ser intrincadas demais

para implementarmos nós mesmos. Evitar a reimplementação de funcionalidade

comum economiza tempo e evita dores de cabeça.

Fila de mão dupla

A classe deque, presente no módulo collections, é uma fila com duas

extremidades (double-ended queue) ou, se preferir, uma fila de mão dupla. Ela

disponibiliza operações de tempo constante para inserir e remover itens tanto do

início como do fim da fila, o que a torna ideal para implementar filas do tipo

FIFO (first-in-first-out, ou o primeiro que entra é o primeiro que sai).

fifo = deque()

fifo.append(1) # Produtor

x = fifo.popleft() # Consumidor

O tipo nativo list também contém uma sequência ordenada de itens, assim como

uma fila. Podemos inserir ou remover itens do fim da lista em tempo constante.

Todavia, fazer o mesmo no início da lista consome um tempo linear, o que é

muito mais demorado que o tempo constante de deque.

Dicionário ordenado

Os dicionários comuns do Python não são ordenados. Isso significa que dois

objetos dict contendo as mesmas chaves e valores podem resultar em ordens

diferentes de iteração. Esse comportamento é um subproduto surpreendente da

maneira como a tabela de hash rápido dos dicionários é implementada.

a = {}

a['foo'] = 1

a['bar'] = 2

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!