PerguntasFrequentes / SobrePython

O que é Python?

Python é uma linguagem de altíssimo nível (VHLL - Very High Level Language), de sintaxe moderna, orientada a objetos, interpretada via bytecode, com tipagem forte (não há conversões automáticas) e dinâmica (não há declaração de variáveis e elas podem conter diferentes objetos), modular, multiplataforma, de fácil aprendizado e de implementação livre. Python foi criada por GuidoVanRossum.

Como se pronuncia Python?

Deve-se dizer "Páifon",lembrando que "th" pronuncia-se colocando a língua entre os dentes e emitindo um som de "f". "Páiton" também é uma pronuncia aceitável.

De onde surgiu esse nome?

Ao contrário do que normalmente se pensa, a origem do nome da linguagem não é a espécie de serpente "Pitón" e sim o grupo inglês de humoristas "Monty Python". O uso da serpente como símbolo da linguagem se difundiu depois da publicação do ProgrammingPython da editora O'Reilly.

Em que tipo de aplicações eu usaria Python?

Python é uma linguagem de uso geral que pode ser empregada em vários tipos de problemas. A biblioteca padrão inclui módulos para processamento de texto e expressões regulares, protocolos de rede (HTTP, FTP, SMTP, POP, XML-RPC, IMAP), acesso aos serviços do sistema operacional, criptografia, interface gráfica etc. Além da biblioteca padrão, existe uma grande variade de extensões adicionais para todo tipo de aplicação.

Python é tipicamente usado em aplicações web e como linguagem de scripting para administração de sistemas. A facilidade de integração com C faz de Python uma linguagem embutida atrativa em aplicações de maior porte. A possibilidade de uso de componentes COM faz de Python uma alternativa mais agradável (e barata) ao Visual Basic. Finalmente, com o uso de ferramentas como o freeze ou Py2Exe é possível distribuir aplicações Python stand-alone, sem que o usuário tenha que instalar o interpretador Python separadamente.

Praticamente tudo o que se faria com qualquer linguagem de programação, seja ela interpretada ou compilada pode-se se fazer com python: protótipos de sistemas, automatizar tarefas repetitivas como manipulação de texto, cópia de arquivos e outros. Pode-se também criar programas que funcionam no modo texto, tanto interativos como servidores (ou daemons). Pode-se fazer programas em modo gráfico usando a interface nativa do seu sistema, ou então utilizando Tk, GTk, Qt, wxWidgets e tantas outra.

E atualmente onde Python tem ganhado grande destaque são nos nichos de desenvolvimento de aplicações web como sites, portais, APIs e microserviços com frameworks como Django e Flask (usados por grandes empresas e instituições como NASA, Instagram, Pinterest, Globo.com, Uber, Airbnb entre outras) e uma outra área onde Python tem sido a linguagem de maior destaque é o ramo da ciência de dados (Data Science) para o tratamento, visualização e procesamento de algoritmos de Inteligência Artificial (I.A, Machine Learning).

E outra área que se aproveita do dinamismo da linguagem é o ramo de administração de sistemas (Sys Admin) utilizando Python como a linguagem de script e automação para tarefas de provisionamento e deploy com ferramentas como Ansible, Fabric e Open Stack, Python tem sido o canivete suiço de todo profissional que atua na nova cultura DevOps e SRE.

Qual a licença usada e quais as restrições de uso?

Python é distribuída sob uma licença própria (compatível com a GPL), que impõe poucas restrições. É permitida a distribuição, comercial ou não, tanto da linguagem quanto de aplicações desenvolvidas nela, em formato binário ou código fonte, bastando cumprir a exigência de manter o aviso de Copyright da PSF (Python Software Foundation). Veja a licença em mais detalhes aqui: Licença do Python 2.x ou Licença do Python 3.x.

Como achar uma boa lista de sites de hospedagem gratuitos que suportam Python?

É bastante comum o uso de VPS (Servidor Privado Virtual) oferecido como PaaS por provedores como Amazon, Google, Microsoft, Digital Ocean e Rackspace, todos os grandes provedores de Cloud Computing oferecem ferramentas e tutoriais para deploy de aplicações web feitas com Python.

Dicas para começar (gratuitamente inclusive) são Heroku e https://www.pythonanywhere.com/

Por que aprender Python?

Porque Python é uma linguagem simples e elegante. Porque Python é fácil de aprender. Porque Python pode ser usado para resolver uma grande variedade de problemas. Porque Python incentiva você a escrever seus programas da maneira correta, sem que isso se torne um empecilho à produtividade.

Python tem uma curva de aprendizado bastante interessante, permitindo que novos programadores, mesmo os que nunca tenham programado antes, sejam imediatamente produtivos escrevendo scripts procedurais. O programador pode executar o interpretador como um shell, vendo imediatamente o resultado da saída de cada comando e explorando os recursos da linguagem interativamente.

Para construir aplicações mais complexas, Python possibilita a fácil migração para a programação orientada a objetos. Um programa pode evoluir naturalmente para esse paradigma à medida que se torna mais complexo. A facilidade inicial do Python não barateia a linguagem, como é comum em linguagens que têm por objetivo expresso serem fáceis de aprender. Python é simples de aprender porque é uma linguagem bem planejada.

Ocultando o Código

Muitas pessoas querem saber como transformar o código python em binário, ocultando-o de leitores indesejáveis. Apesar de não existir um jeito perfeito de fazer isso em nenhuma linguagem, devido aos disassemblers, a página OcultandoCodigoPython fornece algumas informações.

Qual é a melhor IDE para programar em Python?

Essa é com certeza a pergunta mais comum em todos os grupos de Python, quem está começando a programar em Python certamente irá procurar as melhores ferramentas para o seu ambiente de desenvolvimento.

Esta pergunta não tem apenas uma resposta já que hoje em dia existem muitas opções de editores, IDEs e até ambientes completos empacotados e prontos para você programar em Python.

A resposta mais simples e assertiva talvez seja: Nenhuma! (ou aquela que você mais gostar e souber usar)

Para quem já tem uma IDE favorita e já sabe utiliza-la o conselho é que continue usando a ferramenta que te traz mais conforto e produtividade, por exemplo se você já trabalha com Eclipse pode simplesmente utilizar o plugin PyDEV e continuar em seu ambiente favorito.

Se você já conhece ou utiliza as ferramentas da JetBrains como o InteliJ pode então usar o PyCharm que é uma das IDEs mais recomendadas por programadores Python.

Se você já tem um editor de textos favorito como Gedit, Geany, Notepad++, SublimeText, Atom, VSCode, VIM ou Emacs pode simplesmente instalar os plugins para Python e será igualmente produtivo em um desses editores mais simples.

Se você está começando a melhor dica é manter as coisas simples! aprenda a usar o terminal (console) e execute seus programas diretamente no terminal e quanto ao editor utilize um editor básico que te ofereça apenas os recursos básicos como syntax highlight e linters, algumas opções de fácil acesso são Gedit, Geany, Notepad++, kate, SublimeText, Visual Studio Code, Atom cada um desses editores tem um plugin especifico para Python e então depois que aprender mais sobre a linguagem poderá se quiser configurar um ambiente customizado ou usar uma IDE completa.

Grande parte dos programadores experientes em Python preferem o ambiente de terminal puro na companhia de um editor de textos simples!

Grupos de usuários

python-brasil no Google Groups.

python-brasil no Telegram.

Uma linguagem interpretada não é lenta?

Sim e não. Uma linguagem interpretada em geral é mais lenta que uma linguagem compilada. Se a linguagem estará sendo utilizada por estudantes em iniciação, então os programadores deveriam ter uma preocupação maior com a assertividade e a facilidade de programação do que com o desempenho do código, desenvolvendo programas simples, mais fáceis de entender, onde a velocidade não é a maior das considerações.

Além do mais, é possível fazer código otimizado muito mais rápido em Python do que em C, por exemplo. Além disso, atualmente estão se desenvolvendo tecnologias de compilação JIT (just in time) que reduzem drasticamente a diferença entre aplicações desenvolvidas em linguagens compiladas e linguagens interpretadas.

Para ver uma prova disto, basta uma visita rápida a: BenchmarkAdHoc

Se o programa a ser implementado for algum tipo de programa mastigador de grandes volumes de dados ou um sistema de tempo real para controle de hardware, talvez a lentidão seja perceptível. A maioria dos problemas não requer tanto processamento assim, computadores pessoais têm poder de CPU suficiente para rodar satisfatoriamente a maioria dos programas interpretados. Não estamos mais nos anos 80, com Pascal e máquinas de 8 bits para justificar o argumento de lentidão. Ainda mais com o advento do bytecoding e compiladores JIT, o fato de ser interpretado há muito tempo deixou de ser um penalizador. É claro que é difícil chegar ao tempo de execução de uma aplicação feita em C, mas por outro lado, uma perda de velocidade significa um aumento no "tempo do programador", no fato dele escrever mais rápido e menos propenso ao erro.

Alguns dados sobre a produtividade do programador podem ser vistos neste estudo (PDF em inglês) realizado por Lutz Prechelt.

Programas escritos em Python podem ser mais lentos para executar em algumas situações, mas, em geral, levam menos tempo para implementá-los. Se o problema é realmente desempenho, deve-se implementar as partes críticas em linguagens compiladas ou até mesmo em assembly. A questão é quanto do código total possui estes requisitos.

Que empresas usam Python?

Python é utilizada na maioria das empresas de tecnologia, mesmo quando não é a tecnologia principal existe uma grande chance de Python estar inserida como linguagem de apoio ou em ferramentas estratégicas e no próprio sistema operacional que hospeda as soluções das empresas.

Praticamente todas as distribuições Linux utilizam Python em grande parte de seus utilitários.

Empresas de grande porte como Youtube, Google, Pinterest, Instagram, Airbnb, Uber, Facebook, Microsoft, Amazon, RedHat, Globo.com, NASA entre muitas outras utilizam Python como parte fundamental de seus produtos. No Youtube por exemplo, a cada vez que o botão "play" é clicado existem scripts Python que são executados.

Python está entre as 3 linguagens mais populares contabilizando os rankings do Tiobe, Github, IEEE e StackOverflow.

Uma pergunta importante a ser feita é quais empresas não usam e por quê?

Que escolas/faculdades/universidades usam Python?

São ainda poucas, mas com resultados excelentes.

O IME e a POLI na USP, na UFSC, nos departamentos de Física e Matemática. Na Unicamp em cursos de extensão e na PUC-Campinas em cursos de graduação. Na Universidade Federal Rural de Pernambuco no curso de Licenciatura em Computação. O NAPI (Nucleo de Apoio a Projetos de Informática), da UCPel (Universidade Católica de Pelotas), utiliza Python em grande parte dos projetos de pesquisa realizados.

Na Suíça na Fachhochschule de Zurique em cursos de Pós-Graduação.

O caso mais famoso talvez seja o da Yorktown High School, Arlington, Virginia. O Prof. Jeffrey Elkner, desta escola, é um dos autores do livro How to Think Like a Computer Scientist - Learning with Python. No MIT (Massachusetts Institute of Technology), em Boston, Python é usado para introduzir programação a iniciantes na aula "6.00: Introduction to Computer Science and Programming".

Na disciplina de Programação I do curso de Bacharelado em Sistemas de Informação do Instituto Superior Tupy em Joinville, Santa Catarina, substituindo o C++.

A Fatec também utiliza Python em alguns de seus cursos como matéria introdutória a computação.

Para maiores informações sobre este tema, acesse a lista EDU-SIG.

Dá pra escrever programas gráficos com Python?

Sim, e as opções são tantas que podem até atrapalhar. Pode-se utilizar quase a totalidade dos widgetsets disponíveis para Linux em Python e em Windows é possível utilizar a MFC e as APIs de mais alto nível desta plataforma.

Pode-se utilizar: wxPython, PyGTk, PyQt, PythonCard, Tkinter, PyGlade, PMW, Kiwi, ncurses, OpenGL. Tem também: PIL, VPython.

Para uma comparação mais extensa entre as diversas opções para desenvolvimento de aplicações GUI, dêem uma olhada na ComparacaoDeGUIs.

Uma boa referência é o Python Eggs.

O Blender é um excelente exemplo de programa gráfico que utiliza python no desenvolvimento de seu código. Permite inclusive a facilidade de se inserir plug-ins através desta linguagem.

Ser fácil não é um problema?

Sim e não.

Sim, isto pode acontecer. Mas nada que não seja controlável. A facilidade pode gerar um péssimo hábito: o de sentar em um computador e começar a programar sem planejar ou sem de fato resolver o problema desejado antes. Mas acredito que todas as linguagens, mesmo as compiladas, hoje em dia, não estão livres desse problema.

Se você ensina um estudante a utilizar um IDE, ele terá um botão para "compilar e executar" automaticamente o programa. É praticamente a mesma coisa. O professor portanto deve trabalhar isso com os alunos, de tal maneira que esse hábito não se desenvolva.

Ser fácil pode também ser um problema para masoquistas que desejam usar Python ou não-masoquistas que insistem em não usar e ainda assim competir em tempo e qualidade com quem usa.

Não. Ser fácil quer dizer que você não vai perder tempo "traduzindo mentalmente" o que pensa do problema em sua solução em Python, ou seja, você não tem muito "atrito" com a linguagem. Isto é muito importante, principalmente para cursos introdutórios.

Os alunos não ficarão com os conceitos fracos ou mal acostumados?

Sim e não.

Sim. Os alunos tendem a ficar com alguns conceitos fracos. Isso, no entanto, não é culpa da linguagem. Os alunos que estudarem de fato vão aprender e reter os conceitos - desde que o professor não tente ensinar história da computação, programação estruturada, programação lógica e funcional, inteligência artificial e construção de compiladores em seu curso de 4 meses. Se seguir um currículo mínimo: introdução a computação e programação estruturada (if-then-else, laços, e conceitos básicos), os alunos que praticarem vão absorver tudo o que é ensinado.

Se os alunos só aprenderem Python, as chances são maiores. Universidade não tem esse nome à toa, não existe um único conceito que se for aprendido torna todos os demais obsoletos. Python é uma excelente ferramenta, ponto final.

Não. Python suporta os paradigmas estrutural, modular, funcional e Orientado a Objetos. São vários conceitos a serem explorados.

Os conceitos serão ensinados. Os algoritmos podem ser explicados normalmente em Python e, mesmo que Python já disponibilize algumas estruturas de dados como listas e dicionários, é possível fazer com que o aluno reimplemente-as. Tudo depende do foco que o professor quer dar ao seu curso.

Conceitos como alocação de memória, heap, pilha, listas ligadas, arvores binárias podem ser explicados numa etapa mais avançada dos cursos. No início é mais interessante explica para o aluno coisas como: implementar uma calculadora pós-fixada utilizando pilha, ordenar uma lista, fazer uma pesquisa binária nessa lista, percorrer uma árvore binária, utilizando as estruturas de dados nativas de Python.

Dá pra ensinar X usando Python? Onde X pode ser "classes", "herança", "ponteiros", "threads", "estruturas de dados", "ordenação", "recursão", "sockets", ...

Sim, com exceção talvez de ponteiros, o que tem um lado positivo. O conceito de aliases de Python e o método de chamada (por referência) esconde bem os ponteiros. Por outro lado, é possível simular o conceito de ponteiros usando dicionários, se for realmente necessário ensinar.

De maneira geral, as bibliotecas Python procuram não modificar muito o modus operandi da API C subjacente, e isso é *muito* bom. Por exemplo, quem aprende BSD/Sockets em Python vai saber lidar com Sockets em C, basta conhecer as idiossincrasias do C, como casts e estruturas.

Para ser justo, é possível programar sem ponteiros também em C++ (grande parte da má fama de C++ vem do seu mau uso), mas infelizmente isso não isentará o aluno de ter de aprender ponteiros, pois em alguns casos seu uso é mandatório.

Certas coisas não devem ser ensinadas utilizando Python, a não ser como linguagem de prototipagem. Por exemplo, ponteiros estão muito mais relacionados com programação de sistemas em baixo nível, e Python tem como foco um nível acima. No entanto, para o estudo de algoritmos, é difícil que exista coisa melhor.

Algumas estruturas de dados já consagradas são nativas em Python, mas nada impede que elas sejam reimplementadas. Além disso, existem outras estruturas de dados que não fazem parte da linguagem.

E o mercado de trabalho pros alunos?

Está faltando gente qualificada em Python no mercado.

No que se refere a conhecimentos, quanto mais melhor! Python não vai evitar que os alunos tenham que aprender outras linguagens ou ferramentas. Estar preparado para o mercado de trabalho é ser um curioso insaciável, ter prazer em resolver os problemas da profissão (porque trabalhar é resolver problemas) e agir com humildade e respeito com seus colegas. Seguindo estas regras, alguém tem que se esforçar muito para fracassar.

O mercado de trabalho funciona com uma regra simples: de demanda e oferta. As duas necessitam crescer juntas ou ocorre um desequilíbrio.

Que livros e outras bibliografias existem sobre Python?

Mais informações na seção Aprenda Mais.

Uma boa relação está disponível aqui em DocumentacaoPython.

Qual o melhor livro para aprender a programar em Python?

Existem vários livros para aprender Python.

Mais informações na seção Aprenda Mais.

Como faço para executar uma aplicação gráfica (GUI) sem que apareça a janela do prompt de comandos do Windows?

Existem duas formas de resolver este problema:

Onde posso aprender mais sobre Python e Unicode?

Veja esta página com artigos sobre Python e Unicode: PythonUnicode

Onde posso tirar minhas dúvidas?

PerguntasFrequentes/SobrePython (editada pela última vez em 2017-10-19 12:36:59 por EdsonCelio)