Python para Desenvolvedores

2ª edição, revisada e ampliada

Capítulo 1


Introdução

Python é uma linguagem de altíssimo nível (em inglês, Very High Level Language) orientada a objeto, de tipagem dinâmica e forte, interpretada e interativa.

Características

O Python possui uma sintaxe clara e concisa, que favorece a legibilidade do código fonte, tornando a linguagem mais produtiva.

A linguagem inclui diversas estruturas de alto nível (listas, dicionários, data / hora, complexos e outras) e uma vasta coleção de módulos prontos para uso, além de frameworks de terceiros que podem ser adicionados. Também possui recursos encontrados em outras linguagens modernas, tais como: geradores, introspecção, persistência, metaclasses e unidades de teste. Multiparadigma, a linguagem suporta programação modular e funcional, além da orientação a objetos. Mesmo os tipos básicos no Python são objetos. A linguagem é interpretada através de bytecode pela máquina virtual Python, tornando o código portável. Com isso é possível compilar aplicações em uma plataforma e rodar em outros sistemas ou executar direto do código fonte.

Python é um software de código aberto (com licença compatível com a General Public License (GPL), porém menos restritiva, permitindo que o Python seja inclusive incorporado em produtos proprietários). A especificação da linguagem é mantida pela Python Software Foundation (PSF).

Além de ser utilizado como linguagem principal no desenvolvimento de sistemas, o Python também é muito utilizado como linguagem script em vários softwares, permitindo automatizar tarefas e adicionar novas funcionalidades, entre eles: BrOffice.org, PostgreSQL, Blender, GIMP e Inkscape.

É possível integrar o Python a outras linguagens, como a Linguagem C e Fortran. Em termos gerais, a linguagem apresenta muitas similaridades com outras linguagens dinâmicas, como Perl e Ruby.

Histórico

A linguagem foi criada em 1990 por Guido van Rossum, no Instituto Nacional de Pesquisa para Matemática e Ciência da Computação da Holanda (CWI) e tinha originalmente foco em usuários como físicos e engenheiros. O Python foi concebido a partir de outra linguagem existente na época, chamada ABC.

Hoje, a linguagem é bem aceita na indústria por empresas de alta tecnologia, tais como:

  • Google (aplicações Web).
  • Yahoo (aplicações Web).
  • Microsoft (IronPython: Python para .NET)
  • Nokia (disponível para as linhas recentes de celulares e PDAs).
  • Disney (animações 3D).

Versões

A implementação oficial do Python é mantida pela PSF e escrita em C, e por isso, é também conhecida como CPython. A versão estável mais recente está disponível para download no endereço:

http://www.python.org/download/

Para a plataforma Windows, basta executar o instalador. Para outras plataformas, como em sistemas Linux, geralmente o Python já faz parte do sistema, porém em alguns casos pode ser necessário compilar e instalar o interpretador a partir dos arquivos fonte.

Existem também implementações de Python para .NET (IronPython), JVM (Jython) e em Python (PyPy).

Executando programas

Exemplo de programa em Python:

In [3]:
# O caractere "#" indica que o resto da linha é um comentário

# Uma lista de instrumentos musicais
instrumentos = ['Baixo', 'Bateria', 'Guitarra']

# Para cada nome na lista de instrumentos
for instrumento in instrumentos:
    # mostre o nome do instrumento musical
    print instrumento
Baixo
Bateria
Guitarra

No exemplo, instrumentos é uma lista contendo os itens “Baixo”, “Bateria” e “Guitarra”. Já instrumento é um nome que corresponde a cada um dos itens da lista, conforme o laço é executado.

Os arquivos fonte são identificados geralmente pela extensão “.py” e podem ser executados diretamente pelo interpretador:

python apl.py

Assim o programa apl.py será executado. No Windows, as extensões de arquivo “.py”, “.pyw”, “.pyc” e “.pyo” são associadas ao Python automaticamente durante a instalação, então é só clicar no arquivo para executar. Os arquivos “.pyw” são executados com uma versão alternativa do interpretador que não abre a janela de console.

Tipagem dinâmica

Python utiliza tipagem dinâmica, o que significa que o tipo de uma variável é inferido pelo interpretador em tempo de execução (isto é conhecido como Duck Typing). No momento em que uma variável é criada através de atribuição, o interpretador define um tipo para a variável, com as operações que podem ser aplicadas.

A tipagem do Python é forte, ou seja, o interpretador verifica se as operações são válidas e não faz coerções automáticas entre tipos incompatíveis. Para realizar a operação entre tipos não compatíveis, é necessário converter explicitamente o tipo da variável ou variáveis antes da operação.

Compilação e interpretação

O código fonte é traduzido pelo Python para bytecode, que é um formato binário com instruções para o interpretador. O bytecode é multiplataforma e pode ser distribuído e executado sem fonte original.

Compilação, interpretação e empacotamento

Por padrão, o interpretador compila o código e armazena o bytecode em disco, para que a próxima vez que o executar, não precise compilar novamente o programa, reduzindo o tempo de carga na execução. Se os arquivos fontes forem alterados, o interpretador se encarregará de regerar o bytecode automaticamente, mesmo utilizando o shell interativo. Quando um programa ou um módulo é evocado, o interpretador realiza a análise do código, converte para símbolos, compila (se não houver bytecode atualizado em disco) e executa na máquina virtual Python.

O bytecode é armazenado em arquivos com extensão “.pyc” (bytecode normal) ou “.pyo” (bytecode otimizado). O bytecode também pode ser empacotado junto com o interpretador em um executável, para facilitar a distribuição da aplicação, eliminando a necessidade de instalar Python em cada computador.

Modo interativo

O interpretador Python pode ser usado de forma interativa, na qual as linhas de código são digitadas em um prompt (linha de comando) semelhante ao shell do sistema operacional.

python

Ele estará pronto para receber comandos após o surgimento do sinal de espera >>> na tela:

Python 2.6.4 (r264:75706, Nov 3 2009, 13:20:47)
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

No Windows, o modo interativo está disponível também através do ícone “Python (command line)”.

O modo interativo é uma característica diferencial da linguagem, pois é possível testar e modificar trechos de código antes da inclusão do código em programas, fazer extração e conversão de dados ou mesmo analisar o estado dos objetos que estão em memória, entre outras possibilidades.

Além do modo interativo tradicional do Python, existem outros programas que funcionam como alternativas, com interfaces mais sofisticadas (como o PyCrust):

PyCrust

Ferramentas

Existem muitas ferramentas de desenvolvimento para Python, como IDEs, editores e shells (que aproveitam da capacidade interativa do Python).

Integrated Development Environments (IDEs) são pacotes de software que integram várias ferramentas de desenvolvimento em um ambiente consistente, com o objetivo de aumentar a produtividade do desenvolvedor. Geralmente, as IDEs incluem recursos como syntax highlight (código fonte colorizado conforme a sintaxe da linguagem), navegadores de código, shell integrado e code completion (o editor apresenta durante a digitação formas possíveis de completar o texto que ele consegue identificar).

Entre as IDEs que suportam Python, encontram-se:

PyScripter

Existem também editores de texto especializados em código de programação, que possuem funcionalidades como colorização de sintaxe, exportação para outros formatos e conversão de codificação de texto.

Esses editores suportam diversas linguagens de programação, dentre elas o Python:

Shell é o nome dado aos ambientes interativos para execução de comandos, que podem ser usados para testar pequenas porções de código e para atividades como data crunching (extração de informações de interesse de massas de dados e a subsequente tradução para outros formatos).

Além do próprio Shell padrão do Python, existem os outros disponíveis:

  • PyCrust (gráfico)
  • IPython (texto)

Os empacotadores são utilitários que são usados para construir executáveis que englobam o bytecode, o interpretador e outras dependências, permitindo que o aplicativo rode em máquinas sem Python instalado, o que facilita a distribuição de programas.

Entre empacotadores feitos para Python, estão disponíveis:

  • py2exe (apenas para Windows)
  • cx_Freeze (portável)

Frameworks são coleções de componentes de software (bibliotecas, utilitários e outros) que foram projetados para serem utilizados por outros sistemas.

Alguns frameworks disponíveis mais conhecidos:

  • Web: Django, TurboGears, Zope e web2py.
  • Interface gráfica: wxPython, PyGTK e PyQt.
  • Processamento cientifico: NumPy e SciPy.
  • Processamento de imagens: PIL.
  • 2D: Matplotlib e SVGFig.
  • 3D: Visual Python, PyOpenGL e Python Ogre.
  • Mapeamento objeto-relacional: SQLAlchemy e SQLObject.

Cultura

O nome Python foi tirado por Guido van Rossum do programa da TV britânica Monty Python Flying Circus, e existem várias referências na documentação da linguagem ao programa, como, por exemplo, o repositório oficial de pacotes do Python se chamava Cheese Shop, que era o nome de um dos quadros do programa. Atualmente, o nome do repositório é Python Package Index (PYPI).

As metas do projeto foram resumidas por Tim Peters em um texto chamado Zen of Python, que está disponível no próprio Python através do comando:

In [6]:
import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

O texto enfatiza a postura pragmática do Benevolent Dictator for Life (BDFL), como Guido é conhecido na comunidade Python.

Propostas para melhoria da linguagem são chamadas de PEPs (Python Enhancement Proposals), que também servem de referência para novos recursos a serem implementados na linguagem.

Além do site oficial, outras boas fontes de informação sobre a linguagem são: PythonBrasil, o site da comunidade Python no Brasil, com bastante informação em português, e Python Cookbook, site que armazena “receitas”: pequenas porções de código para realizar tarefas específicas.

In [1]:
 
Out[1]: