Pequena dica de Python: leia os fontes

Python é uma linguagem open-source, com uma extensa biblioteca. E os módulos da biblioteca são escritos em Python. Alguns módulos, como pickle e StringIO, tem versões em C mais rápidas (cPickle e cStringIO) mas as versões em Python são mantidas para que você possa ler os fontes.

Veja como descobrir onde estão os fontes de um módulo qualquer:

>>> import glob
>>> glob.__file__
'/usr/lib/python2.7/glob.pyc'

O nome do arquivo tem a extensão pyc. É um compilado. Tire o último “c” e você terá o caminho do arquivo com o código fonte. Dê uma lida no conteúdo do glob.py, por exemplo, e você deve achar muito simples mas bastante interessante.

Se você está aprendendo Python agora, sempre que for resolver uma tarefa sobre determinado assunto, dê uma olhada no código dos módulos relacionados aquele assunto. Você vai ver como a comunidade Python tem abordado problemas semelhantes aos seus e com certeza vai aprender muito.

Publicado por

Elcio

Elcio é sócio fundador da Visie Padrões Web. Pioneiro no uso e divulgação dos padrões do W3C no Brasil, Elcio já treinou equipes de dezenas de empresas como Globo.com, Terra, Petrobras, iG e Locaweb. Além disso, tem dirigido as equipes da Visie no desenvolvimento de projetos web para marcas como Brastemp, Itaú Unibanco, Johnson & Johnson e Rede Globo.

3 comentários em “Pequena dica de Python: leia os fontes”

  1. Amigão, só uma pequena correção: o módulo cPickle existe implementado em C pois é muito mais rápido para serializar objetos (seu propósito), porém, ele perde alguns recursos de orientação a objetos, então, por isso sim, existe o módulo em python, para que você possa escolher entre o recurso da orientação a objetos do módulo ou a eficacia deste módulo em C porém sem uso de classes. Não tem nada a ver com o fato de você poder ler ou não o código fonte, pois você pode ler o código em C também, se quiser. cPickle não é igual ao pickle.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *