# Python Geral

## Informações gerais

### O que é Python?

O Python é uma linguagem de programação interpretada, interativa e orientada a objetos. O mesmo incorporou módulos, exceções, tipagem dinâmica, tipos de dados dinâmicos de alto nível e classes. Há suporte a vários paradigmas de programação além da programação orientada a objetos, tal como programação procedural e funcional. O Python fornece ao desenvolvedor um poder notável aliado a uma sintaxe simples de clara. Possui interfaces para muitas chamadas e bibliotecas do sistema, bem como para vários sistemas de janelas, e é extensível através de linguagem como o C ou C++. Também é utilizado como linguagem de extensão para aplicativos que precisam de uma interface programável. Finalmente, o Python é portátil: o mesmo pode ser executado em várias variantes do Unix, incluindo Linux e Mac, e no Windows.

Para saber mais, inicie pelo nosso tutorial O tutorial do Python. Os links do Beginner’s Guide to Python para outros tutoriais introdutórios e recursos da linguagem Python.

### O que é a Python Software Foundation?

O Python Software Foundation é uma organização independente e sem fins lucrativos que detém os direitos autorais sobre as versões 2.1 do Python e as mais recentes. A missão do PSF é avançar a tecnologia de código aberto relacionada à linguagem de programação Python e divulgar a utilização do Python. A página inicial do PSF pode ser acessada pelo link a seguir https://www.python.org/psf/.

Doações para o PSF estão isentas de impostos nos EUA. Se utilizares o Python e achares útil, contribua através da página de doação da PSF.

### Existem restrições de direitos autorais sobre o uso de Python?

Podemos fazer tudo o que quisermos com os fontes, desde que deixemos os direitos autorais e exibamos esses direitos em qualquer documentação sobre o Python que produzirmos. Se honrarmos as regras dos direitos autorais, não há quaisquer problema em utilizar o Python em versões comerciais, vendê-lo, copiá-lo na forma de código-fonte ou o seu binária (modificado ou não modificado), ou para vender produtos que incorporem o Python de alguma forma. Ainda gostaríamos de saber sobre todo o uso comercial de Python, é claro.

Veja a página da licença para encontrar mais explicações e um link para o texto completo da licença.

O logotipo do Python é marca registrada e, em certos casos, é necessária permissão para usá-la. Consulte a Política de Uso da Marca comercial para obter mais informações.

### Em primeiro lugar, por que o Python foi desenvolvido?

Aqui está um resumo muito breve de como que tudo começou, escrito por Guido van Rossum:

> Eu tive vasta experiência na implementação de linguagens interpretada no grupo ABC da CWI e, ao trabalhar com esse grupo, aprendi muito sobre o design de linguagens. Esta é a origem de muitos recursos do Python, incluindo o uso do recuo para o agrupamento de instruções e a inclusão de tipos de dados de alto nível (embora existam diversos detalhes diferentes em Python).

> Eu tinha uma série de queixas sobre a linguagem ABC, mas também havia gostado de muitos das suas características. Era impossível estender ABC (ou melhorar a implementação) para remediar minhas queixas – na verdade, a falta de extensibilidade era um dos maiores problemas. Eu tinha alguma experiência com o uso de Modula-2+ e conversei com os designers do Modula-3 e li o relatório do Modula-3. Modula-3 foi a origem da sintaxe e semântica usada nas exceções, e alguns outros recursos do Python.

> Eu estava trabalhando no grupo de sistema operacional distribuído da Amoeba na CWI. Precisávamos de uma maneira melhor de administrar o sistema do que escrevendo programas em C ou scripts para a shell Bourne, uma vez que o Amoeba tinha a sua própria interface de chamada do sistema, que não era facilmente acessível a partir do shell Bourne. Minha experiência com o tratamento de erros em Amoeba me conscientizou da importância das exceções como um recurso das linguagens de programação.

> Percebi que uma linguagem de script com uma sintaxe semelhante a da ABC, mas com acesso às chamadas do sistema Amoeba, preencheria a necessidade. Percebi também que seria uma boa escrever uma linguagem específica para o Amoeba, então, decidi que precisava de uma linguagem realmente extensível.

> Durante as férias do Natal de 1989, tive bastante tempo disponível e então decidi tentar a construção de algo. Durante o ano seguinte, continuei trabalhando em minhas horas vagas, e o Python foi usado no projeto Amoeba com crescente sucesso, e o feedback dos colegas me fez implementar muitas melhorias.

> Em fevereiro de 1991, depois de mais de um ano de desenvolvimento, decidi publicar na USENET. O resto está no arquivo `Misc/HISTORY`.

### Para o que Python é excelente?

Python é uma linguagem de programação de propósito geral, de alto nível e que pode ser aplicada em muitos tipos diferentes de problemas.

A linguagem vem com uma grande biblioteca padrão que abrange áreas como processamento de strings (expressões regulares, Unicode, cálculo de diferenças entre arquivos), protocolos de internet (HTTP, FTP, SMTP, XML-RPC, POP, IMAP), engenharia de software (testes de unidade , registro, criação de perfil, análise de código Python) e interfaces de sistema operacional (chamadas de sistema, sistemas de arquivos, soquetes TCP/IP). Veja o sumário de A Biblioteca Padrão do Python para ter uma ideia do que está disponível. Uma ampla variedade de extensões de terceiros também está disponível. Consulte o Python Package Index para encontrar pacotes de seu interesse.

### Como funciona o esquema de numeração de versões do Python?

As versões de Python são enumeradas como “A.B.C” ou “A.B”:

- A é o número da versão principal - sendo incrementada apenas em grandes mudanças na linguagem.

- B é o número da versão menor - sendo incrementada apenas para mudanças menos estruturais.

- C é o número para micro versão – sendo incrementada apenas para lançamento com correção de bugs.

Nem todos as versões são lançamentos de correções de erros. Na corrida por um novo lançamento de funcionalidade, uma série de versões de desenvolvimento são feitas, denotadas como alfa, beta ou candidata. As versões alfa são lançamentos iniciais (early releases) em que as interfaces ainda não estão finalizadas; não é inesperado ver uma mudança de interface entre duas versões alfa. As betas são mais estáveis, preservando as interfaces existentes, mas possivelmente adicionando novos módulos, e as candidatas a lançamento são congeladas, sem alterações, exceto quando necessário para corrigir erros críticos.

As versões alpha, beta e candidata a lançamento possuem um sufixo adicional:

- O sufixo para uma versão alfa é “aN” para algum número pequeno N.

- O sufixo para uma versão beta é “bN” para algum número pequeno N.

- O sufixo para um lançamento em versão candidata é “rcN” para algum número pequeno N.

Em outras palavras, todas as versões rotuladas como 2.0aN precedem as versões rotuladas como 2.0bN, que por sua vez precedem versões rotuladas como 2.0rcN, e estas precedem 2.0.

Também podemos encontrar números de versão com um sufixo “+”, por exemplo, “2.2+”. Estas são versões não lançadas, construídas diretamente do repositório de desenvolvimento do CPython. Na prática, após uma última versão menor, a versão é incrementada para a próxima versão secundária, que se torna a versão “a0”, por exemplo, “2.4a0”.

Veja o Developer’s Guide para mais informações sobre o ciclo de desenvolvimento, e a PEP 387 para aprender mais sobre a política de compatibilidade com versões anteriores do Python. Veja também a documentação para `sys.version`, `sys.hexversion`, e `sys.version_info`.

### Como faço para obter uma cópia dos fonte do Python?

A última distribuição fonte do Python sempre está disponível no python.org, em https://www.python.org/downloads/. As últimas fontes de desenvolvimento podem ser obtidas em https://github.com/python/cpython/.

A distribuição fonte é um arquivo .tar com .gzip contendo o código-fonte C completo, a documentação formatada com o Sphinx, módulos de biblioteca Python, programas de exemplo e várias peças úteis de software livremente distribuível. A fonte compilará e executará sem a necessidade de configurações extras na maioria das plataformas UNIX.

Consulte a seção Introdução do Guia do Desenvolvedor Python para obter mais informações sobre como obter o código-fonte e compilá-lo.

### Como faço para obter a documentação do Python?

A documentação padrão para a versão atualmente estável do Python está disponível em https://docs.python.org/3/. Em PDF, texto simples e versões HTML para download também estão disponíveis em https://docs.python.org/3/download.html.

A documentação é escrita em reStructuredText e processada pela ferramenta de documentação Sphinx. Os fonte do reStructuredText para documentação fazem parte da distribuição fonte do Python.

### Eu nunca programei antes. Existe um tutorial básico do Python?

Existem inúmeros tutoriais e livros disponíveis. A documentação padrão inclui O tutorial do Python.

Consulte o Guia do Iniciante para encontrar informações para quem está começando agora na programação Python, incluindo uma lista com tutoriais.

### Existe um grupo de discussão ou lista de discussão dedicada ao Python?

Existe um grupo de notícias comp.lang.python, e uma lista de discussão, python-list. O grupo notícias e a lista de discussão são conectados um ou outro – se poderes ler as notícias, não será necessário se inscrever na lista de discussão. comp.lang.python possui bastante postagem, recebendo centenas de postagens todos os dias, e os leitores do Usenet geralmente são mais capazes de lidar com esse volume.

Os anúncios de novas versões do software e eventos podem ser encontrados em comp.lang.python.announce, uma lista moderada de baixo tráfego que recebe cerca de cinco postagens por dia. Está disponível como a lista de discussão python-announce.

Mais informações sobre outras listas de discussão e grupos de notícias podem ser encontradas em https://www.python.org/community/lists/.

### Como faço para obter uma versão de teste beta do Python?

As versões alfa e beta estão disponíveis em https://www.python.org/downloads/. Todos os lançamentos são anunciados nos grupos de notícias comp.lang.python e comp.lang.python.announce e na página inicial do Python em https://www.python.org/; um feed RSS de notícias está disponível.

Você também pode acessar a versão de desenvolvimento do Python através do Git. Veja O Guia do Desenvolvedor Python para detalhes.

### Como eu envio um relatório de erros e correções para o Python?

Para relatar um bug ou enviar um patch, use o rastreador de problemas em https://github.com/python/cpython/issues.

Para mais informações sobre como o Python é desenvolvido, consulte o Guia do Desenvolvedor Python.

### Existem alguns artigos publicados sobre o Python para que eu possa fazer referência?

Provavelmente será melhor citar o seu livro favorito sobre o Python.

O primeiro artigo sobre Python foi escrito em 1991 e atualmente se encontra bastante desatualizado.

> Guido van Rossum e Jelke de Boer, “Interactively Testing Remote Servers Using the Python Programming Language”, CWI Quarterly, Volume 4, Edição 4 (dezembro de 1991), Amsterdam, pp. 283–303.q

### Existem alguns livros sobre o Python?

Sim, há muitos publicados e muitos outros que estão sendo nesse momento escritos!! Veja o wiki python.org em https://wiki.python.org/moin/PythonBooks para obter uma listagem.

Você também pode pesquisar livrarias online sobre “Python” e filtrar as referências a respeito do Monty Python; ou talvez procure por “Python” e “linguagem”.

### Onde está armazenado o site www.python.org?

A infraestrutura do projeto Python está localizada em todo o mundo e é gerenciada pela equipe de infraestrutura do Python. Detalhes aqui.

### Por que o nome Python?

Quando o Guido van Rossum começou a implementar o Python, o mesmo também estava lendo os scripts publicados do “Monty Python’s Flying Circus”, uma série de comédia da BBC da década de 1970. Van Rossum pensou que precisava de um nome curto, único e ligeiramente misterioso, então resolveu chamar a sua linguagem de Python.

### Eu tenho que gostar de “Monty Python’s Flying Circus”?

Não, mas isso ajuda. :)

## Python no mundo real

### Quão estável é o Python?

Muito estável. Novos lançamentos estáveis são divulgados aproximadamente de 6 a 18 meses desde 1991, e isso provavelmente continuará. A partir da versão 3.9, o Python terá um novo grande lançamento a cada 12 meses (PEP 602).

Os desenvolvedores lançam versões bugfix de versões mais antigas, então a estabilidade dos lançamentos existentes melhora gradualmente. As liberações de correções de erros, indicadas por um terceiro componente do número da versão (por exemplo, 3.5.3, 3.6.2), são gerenciadas para estabilidade; somente correções para problemas conhecidos são incluídas em uma versão de correções de erros, e é garantido que as interfaces permanecerão as mesmas durante uma série de liberações de correções de erros.

As últimas versões estáveis podem sempre ser encontradas na página de download do Python. O Python 3.x é a versão recomendada e suportada pela maioria das bibliotecas amplamente utilizadas. Python 2.x não é mais mantido.

### Quantas pessoas usam o Python?

Provavelmente existem milhões de usuários, embora seja difícil obter uma contagem exata.

O Python está disponível para download gratuito, portanto, não há números de vendas, e o mesmo está disponível em vários diferentes sites e é empacotado em muitas distribuições Linux, portanto, utilizar as estatísticas de downloads não seria a melhor forma para contabilizarmos a base de usuários.

O grupo de notícias comp.lang.python é bastante ativo, mas nem todos os usuários Python postam no grupo ou mesmo o leem regularmente.

### Existe algum projeto significativo feito em Python?

Veja a lista em https://www.python.org/about/success para obter uma listagem de projetos que usam o Python. Consultar as conferências passadas do Python revelará as contribuições de várias empresas e de diferentes organizações.

Os projetos Python de alto perfil incluem o gerenciador de lista de e-mail Mailman e o servidor de aplicativos Zope. Várias distribuições Linux, mais notavelmente o Red Hat, escreveram parte ou a totalidade dos seus instaladores e software de administração do sistema em Python. Empresas que usam Python internamente incluem Google, Yahoo e Lucasfilm Ltd.

### Quais são os novos desenvolvimentos esperados para o Python no futuro?

Consulte https://peps.python.org/ para ver a lista de propostas de aprimoramento do python (PEPs). As PEPs são documentos de design que descrevem novos recursos que foram sugeridos para o Python, fornecendo uma especificação técnica concisa e a sua lógica. Procure uma PEP intitulado de “Python X.Y Release Schedule”, onde X.Y é uma versão que ainda não foi lançada publicamente.

Novos desenvolvimentos são discutidos na lista de discussão python-dev.

### É razoável propor mudanças incompatíveis com o Python?

Normalmente não. Já existem milhões de linhas de código Python em todo o mundo, de modo que qualquer alteração na linguagem que invalide mais de uma fração muito pequena dos programas existentes deverá ser desaprovada. Mesmo que possamos fornecer um programa de conversão, ainda haverá o problema de atualizar toda a documentação; muitos livros foram escritos sobre o Python, e não queremos invalidá-los todos de uma vez só.

Fornecer um caminho de atualização gradual será necessário se um recurso precisar ser alterado. A PEP 5 descreve o procedimento e em seguida introduz alterações incompatíveis com versões anteriores ao mesmo tempo em que minimiza a interrupção dos usuários.

### O Python é uma boa linguagem para quem está começando na programação agora?

Sim.

Ainda é bastante comum que os alunos iniciem com uma linguagem procedimental e estaticamente tipada como Pascal e o C ou um subconjunto do C++ ou do Java. Os alunos podem ser melhor atendidos ao aprender Python como sua primeira linguagem. Python possui uma sintaxe muito simples e consistente e uma grande quantidade de bibliotecas padrão e, o mais importante, o uso do Python em um curso de programação para iniciantes permite aos alunos se concentrarem em habilidades de programação importantes, como a decomposição do problema e o design do tipo de dados. Com Python, os alunos podem ser introduzidos rapidamente em conceitos básicos, como repetições e procedimentos. Provavelmente os mesmos até poderão trabalhar com objetos definidos por ele mesmos logo em seu primeiro curso.

Para um aluno que nunca programou antes, usar uma linguagem estaticamente tipado parece não que não é natural. Isso apresenta uma complexidade adicional que o aluno deverá dominar e geralmente retarda o ritmo do curso. Os alunos estão tentando aprender a pensar como um computador, decompor problemas, projetar interfaces consistentes e encapsular dados. Embora aprender a usar uma linguagem tipicamente estática seja importante a longo prazo, não é necessariamente o melhor tópico a ser abordado no primeiro momento de um curso de programação.

Muitos outros aspectos do Python fazem do mesmo uma excelente linguagem para quem está aprendendo a programar. Como Java, Python possui uma biblioteca padrão grande para que os estudantes possam receber projetos de programação muito cedo no curso e que possam fazer trabalhos úteis. As atribuições não estão restritas à calculadora padrão de quatro funções e os programas para verificar o peso. Ao usar a biblioteca padrão, os alunos podem ter a satisfação de trabalhar em aplicações reais à medida que aprendem os fundamentos da programação. O uso da biblioteca padrão também ensina os alunos sobre a reutilização de código. Os módulos de terceiros, como o PyGame, também são úteis para ampliar o alcance dos estudantes.

O interpretador interativo do Python permite aos alunos testarem recursos da linguagem enquanto estão programando. Os mesmos podem manter uma janela com o interpretador executado enquanto digitam o fonte do seu programa numa outra janela. Se eles não conseguirem se lembrar dos métodos de uma lista, eles podem fazer algo assim:

    >>> L = []
    >>> dir(L)
    ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__',
    '__dir__', '__doc__', '__eq__', '__format__', '__ge__',
    '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__',
    '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__',
    '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',
    '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__',
    '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear',
    'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove',
    'reverse', 'sort']
    >>> [d for d in dir(L) if '__' not in d]
    ['append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

    >>> help(L.append)
    Help on built-in function append:

    append(...)
        L.append(object) -> None -- append object to end

    >>> L.append(1)
    >>> L
    [1]

Com o interpretador, a documentação nunca está longe do aluno quando estão programando.

Há também boas IDEs para o Python. O IDLE é uma IDE multiplataforma para o Python e que foi escrito em Python usando o Tkinter. Os usuários do Emacs estarão felizes em saber que existe um ótimo modo Python para Emacs. Todos esses ambientes de programação fornecem destaque de sintaxe, recuo automático e acesso ao interpretador interativo durante o tempo de desenvolvimento. Consulte o wiki do Python para obter uma lista completa dos ambientes de desenvolvimento para o Python.

Se você quiser discutir o uso do Python na educação, poderás estar interessado em se juntar à lista de discussão edu-sig.