Python
Python é uma linguagem de programação de alto nível, interpretada, de script, imperativa, orientada a objetos, funcional, com tipagem dinâmica e forte. Foi lançada por Guido van Rossum em 1991. Atualmente, seu desenvolvimento é comunitário, aberto e gerenciado pela organização sem fins lucrativos Python Software Foundation. Apesar de várias partes da linguagem possuírem padrões e especificações formais, a linguagem como um todo não é formalmente especificada. A implementação CPython é o padrão na prática.
Python foi concebida no final de 1989 por Guido van Rossum no Instituto de Pesquisa Nacional para Matemática e Ciência da Computação (CWI), nos Países Baixos. O objetivo era criar um sucessor da linguagem ABC, capaz de tratar exceções e interagir com o sistema operacional Amoeba por meio de scripts. A linguagem ABC, embora mais produtiva que C, tinha limitações de desempenho em tempo de execução e não possuía funcionalidades essenciais para interação com o sistema operacional, uma necessidade do grupo. Python teve como foco primordial aumentar a produtividade do programador. A linguagem foi baseada na ABC, com parte da sintaxe derivada do C, e incorporou conceitos como compreensão de listas, funções anônimas e a função `map` de Haskell. Iteradores foram baseados na Icon, tratamento de exceções e módulos na Modula-3, e expressões regulares na Perl. Em 1991, Guido publicou o código (versão 0.9.0) no grupo de discussão `alt.sources`. Essa versão inicial já incluía classes com herança, tratamento de exceções, funções e tipos de dados nativos como `list`, `dict`, `str`, entre outros. Um sistema de módulos, emprestado da Modula-3, também estava presente, assim como um modelo de exceções semelhante ao da Modula-3, com a adição da cláusula `else`. Em 1994, foi formado o fórum de discussão `comp.lang.python`, um marco importante para o crescimento da base de usuários da linguagem.
Parte da cultura da linguagem Python gira em torno de "The Zen of Python", um poema que compõe o documento "PEP 20 (The Zen of Python)". Escrito por Tim Peters, um programador Python experiente, o poema descreve a filosofia da linguagem. Entre os vinte princípios do poema, encontram-se: "Bonito é melhor que feio", "Explícito é melhor que implícito", "Simples é melhor que complexo", "Complexo é melhor que complicado". É possível visualizá-lo através de um "easter egg" no Python, utilizando o comando `import this`.
O desenvolvimento de Python é conduzido amplamente através do processo "Python Enhancement Proposal" (PEP), ou Proposta de Melhoria do Python. Os PEPs são documentos padronizados que fornecem informações gerais sobre a linguagem, incluindo propostas, descrições, justificativas de projeto e explicações para características da linguagem. PEPs pendentes são revisados e comentados por Guido van Rossum, o "Benevolent Dictator for Life" (líder arquiteto da linguagem) do projeto Python. Desenvolvedores do CPython também se comunicam através da lista de discussão `python-dev`, o principal fórum para discussões sobre o desenvolvimento da linguagem. Questões específicas são tratadas no gerenciador de erros Roundup, mantido em python.org. O desenvolvimento ocorre no repositório auto-hospedado `https://svn.python.org/`. Python possui uma licença livre aprovada pela OSI e compatível com a GPL, porém com menos restrições. Ela permite, entre outras coisas, que binários da linguagem sejam distribuídos sem a necessidade de fornecer o código fonte junto.
Módulos e frameworks
Ao longo do tempo, a comunidade de programadores desenvolveu diversas bibliotecas de funções especializadas (módulos) que expandem as capacidades base da linguagem. Entre estes módulos especializados, destacam-se:
Ambientes de desenvolvimento integrado
Existem vários ambientes de desenvolvimento integrado (IDE) disponíveis para Python:
A linguagem é de altíssimo nível. Ela também pode compilar seus programas para que, na próxima execução, não precise recompilar, reduzindo o tempo de carregamento. Ao utilizar o interpretador interativo, não é necessário criar um arquivo compilado de Python, pois os comandos são executados interativamente. No entanto, quando um programa ou módulo é invocado, o interpretador realiza a análise léxica e sintática, compila o código de alto nível, se necessário, e o executa na máquina virtual da linguagem. O bytecode é armazenado em arquivos com extensão `.pyc` ou `.pyo` (no caso de bytecode otimizado). O bytecode da linguagem também é de alto nível, sendo mais legível para humanos do que o código de byte de linguagens como C. Para descompilar um código de byte, utiliza-se o módulo `dis` da biblioteca padrão da linguagem. Existem também módulos de terceiros que tornam o bytecode mais confuso, dificultando a descompilação.
Construções
As construções de Python incluem: estrutura de seleção (`if`, `else`, `elif`); estrutura de repetição (`for`, `while`), que itera sobre um container, capturando cada elemento em uma variável local; construção de classes (`class`); construção de sub-rotinas (`def`); construção de escopo (`with`), utilizada para adquirir um recurso, por exemplo.
Tipos de dados
A tipagem de Python é forte, pois valores e objetos possuem tipos bem definidos e não sofrem coerções automáticas como em C ou Perl. Diversos tipos de dados nativos são disponibilizados: Python também permite a definição de tipos de dados próprios através de classes. Instâncias são criadas invocando a classe (ex: `FooClass()`), e as classes são instâncias da classe `type`, o que possibilita metaprogramação e reflexão. Métodos são definidos como funções anexadas à classe, e a sintaxe `instancia.metodo(argumento)` é um atalho para `Classe.metodo(instancia, argumento)`. Os métodos devem referenciar explicitamente a referência para o objeto, incluindo o parâmetro `self` como o primeiro argumento do método.
Palavras reservadas
O Python 3 define as seguintes palavras reservadas: A versão 3.10.0 implementou a "Structural Pattern Matching" (Correspondência de Padrão Estrutural), semelhante ao `Switch-Case` de outras linguagens, conforme definido na PEP 634. Por isso, as palavras `match` e `case` passaram a ser reservadas.
Operadores
Os operadores básicos de comparação como `==`, `<`, `>=`, entre outros, são usados em todos os tipos de dados, como números, cadeias de texto, listas e mapeamentos. Comparações em cadeia, como `a < b < c`, têm o mesmo significado básico da matemática: os termos são comparados na ordem. É garantido que o processamento da expressão lógica terminará assim que o veredito for claro, seguindo o princípio da avaliação mínima. Usando a expressão anterior, se `a < b` for falso, `c` não será avaliado. Quanto aos operadores lógicos, até Python 2.2 não havia o tipo de dado booleano. Em todas as versões da linguagem, os operadores lógicos tratam `""`, `0`, `None`, `0.0`, `[]` e `{}` como falso, enquanto o restante é tratado como verdadeiro de modo geral. Na versão 2.2.1, as constantes `True` e `False` foram adicionadas (subclasses de `1` e `0`, respectivamente). A comparação binária retorna uma dessas duas constantes.
Interpretador interativo
O interpretador interativo é uma característica diferencial da linguagem, pois permite testar o código de um programa e receber o resultado em tempo real, antes de iniciar a compilação ou incluí-lo nos programas. Por exemplo:
Análise léxica
No segundo capítulo do Manual de Referência da Linguagem Python, é citado que a análise léxica é uma análise do próprio interpretador. Os programas são lidos por um analisador sintático que divide o código em tokens. Todo programa é dividido em linhas lógicas, separadas pelo token `NEWLINE` (ou NOVA LINHA). As linhas físicas são trechos de código divididos pelo caractere ENTER. Linhas lógicas não podem ultrapassar linhas físicas, com exceção de junção de linhas, por exemplo: Para a delimitação de blocos de código, os delimitadores são colocados em uma pilha e diferenciados por sua indentação, iniciando a pilha com valor 0 (zero) e adicionando valores maiores que os anteriores na pilha. Para cada início de linha, o nível de indentação é comparado com o valor do topo da pilha. Se o número da linha for igual ao topo da pilha, a pilha não é alterada. Se o valor for maior, a pilha recebe o nível de indentação da linha e o nome `INDENT` (empilhamento). Se o nível de indentação for menor, então ocorre um desempilhamento até chegar a um nível de indentação, recebendo o nome `DEDENT` (desempilhamento). Se nenhum valor correspondente for encontrado, um erro de indentação é gerado.
Algoritmo de Trabb Pardo-Knuth
Ponto flutuante em Python, na maioria das plataformas, segue o padrão IEEE 754, que pode retornar valores "nan" (not a number) e "inf" (infinity), ou lançar uma exceção.
Analisador sintático
Exemplo de um analisador sintático usando uma gramática de análise sintática de expressão (PEG):
Interface de linha de comandos
Exemplo de uma implementação do comando `echo` do Unix:
Servidor HTTP
Exemplo de um web service RESTful (HTTP) usando funções assíncronas e serialização para JSON; responde com um número de CPF formatado, se for válido, ao acessar `http://localhost:8000/consultar-cpf/123`: Pode ser executado com o seguinte comando:
Banco de dados
Python possui várias bibliotecas para interagir com bancos de dados, como por exemplo o `sqlite3` (já embutido no Python).
A linguagem e seu interpretador estão disponíveis para uso em diversas plataformas, incluindo: Unix (Linux, FreeBSD, Solaris, macOS, etc.); Windows com .NET (IronPython) e plataforma Java (Jython); consoles de jogos eletrônicos; alguns celulares, como a série 60, N8xx (PyMaemo) da Nokia e palmtops. A implementação original e mais conhecida do Python é o CPython, escrita em C e compatível com o padrão C89, sendo distribuída com uma grande biblioteca padrão escrita em um misto de Python e C. Esta implementação é suportada em diversas plataformas, incluindo Windows e sistemas Unix-like modernos. Stackless Python é uma variação do CPython que implementa microthreads (permitindo multitarefa sem o uso de threads), sendo suportada em quase todas as plataformas que a implementação original. Em 2005, a Nokia lançou um interpretador Python para os telefones celulares S60, chamado PyS60. Essa versão inclui vários módulos das implementações tradicionais, mas também módulos adicionais para integração com o sistema operacional Symbian. Uma implementação para Palm pode ser encontrada no Pippy. Já o PyPy é a linguagem Python totalmente escrita em Python.
Alguns grandes projetos utilizam Python, como por exemplo: o servidor de aplicação Zope; o compartilhador de arquivos Mnet; o sítio YouTube; e o cliente original BitTorrent. Grandes organizações que usam a linguagem incluem Google (parte dos crawlers); Yahoo! (para o sítio de grupos de usuários); NASA; e a Air Canada (no sistema de gerenciamento de reservas). A linguagem também tem bastante uso na indústria da segurança da informação. A linguagem tem sido embarcada como linguagem de script em diversos softwares, como em programas de edição tridimensional como Maya, Autodesk Softimage, TrueSpace e Blender. Programas de edição de imagem também a utilizam para scripts, como o GIMP. Para diversos sistemas operacionais, a linguagem já é um componente padrão, estando disponível em diversas distribuições Linux. O Red Hat Linux usa Python para instalação, configuração e gerenciamento de pacotes. Outros exemplos incluem o Plone, um sistema de gerenciamento de conteúdo desenvolvido em Python e Zope, e a Industrial Light & Magic, que produz filmes da série Star Wars usando extensivamente Python para a computação gráfica nos processos de produção dos filmes.