0. Conteúdo

0. Conteúdo 01. Introdução 02. O que é Python 03. A Filosofia 04. A história do software 05. A Linguagem 06. Interfaces gráficas (GUI) 07. Licença 08. Comparações entre linguagens 09. Elogios 10. Histórias de sucesso 11. Framework 12. Aplicações práticas 13. Bibliografia 14. Conclusão

1. Introdução

Python é simples de ser aprendido, por ser uma linguagem de programação muito poderosa. Foi criada pelo matemático Guido van Rossum para o ensino de programação. É uma eficiente estrutura de dados de alto-nível e para programação orientada a objetos. Python tem uma sintaxe elegante e tipada dinamicamente, junto com um interpretador nativo, ideal para fazer linguagem de scripts e desenvolvimento de aplicações rápidas (RAD) para muitas aplicações em muitas áreas.

Existem muitos pontos positivos na linguagem como também pontos negativos. É uma linguagem de desenvolvimento rápido (RAD), de fácil aprendizado, sintaxe fácil e descritiva (descritiva onde “o que se pensa escreve”, não se preocupando com “código sujo” como interrogação, ponto-e-vígula, begin-end, colchetes, etc), multi-plataforma, integração com linguagens como C e Java e banco de dados Oracle, PostgreSQL e MySQL e mais, vasta e ótima documentação, são pontos positivos. Os pontos negativos são a própria documentação não traduzida para português, linguagem em constante desenvolvimento não tendo padronização, muito nova e pouco conhecida, faltando qualificação profissional.

2. O que é Python

O Python é uma linguagem de programação portável, pode ser utilizada em plataforma Windows, Linux e UNIX. É Interpretada e Interativa. Orientada a objetos, mas tudo em Python é objeto. Tipada dinamicamente, não se declara o tipo de variáveis, retornos de funções e parâmetros, os tipos são identificados de acordo com o uso que fazemos deles. O controle de bloco de comandos é feito apenas por alinhamento (Endentada), não há delimitadores do tipo Begin e End do Pascal ou { e } da linguagem C. Oferece tipos de dados de alto nível como strings de verdade, dicionários (também conhecido por hashes ou arranjos associativos), listas, tuplas, classes, etc. Aceita outros paradigmas de programação bastantes úteis, como a programação modular, para evitar a "poluição" de nomes e a programação funcional, que descreve mais facilmente determinadas estruturas. A programação modular foi bastante discutida e criticada, comparando scripts Shell, onde se faz um único script para toda a resolução do problema, códigos deste tipo acabam sendo de difícil manutenção, longos, lentos e complicados. A programação modular foi criticada devido a comunicação entre os módulos que demandariam um tempo maior, mais implementação e se complicaria mais e mais não valendo trocar um Shell script por uma linguagem que contenha inúmeros módulos; mas em Python não existe complicação, módulos são de fácil comunicação, organização e implementação e são sim, incentivados. A sintaxe é fácil de ser compreedida e rápida de ser desenvolvida; as construções dos tipos de dados são de alto-nível. Python pode ser extendida em módulos de compilação como C e C++. Os módulos de extensão podem definir novas funções e variáveis, também como novos tipos de objetos. Python é semelhante a outras linguagens interpretadas como Tcl, Perl, Scheme e Java.

Python tem um pleno leque de operações de string (incluindo expressões regulares), e libera o operador da maioria do trabalho em cima da gerência de memória. Estas e outras características fazem dela uma linguagem ideal para desenvolvimento de protótipos e outras tarefas de programação.

Python também tem algumas características que se torna possível escrever programas grandes, mesmo que falte formas de verificação por compilação: um programa pode ser construído em módulos, cada um definido pelo seu nome, e eles podem definir classes que fornecem encapsulação. A tratamento de exceções é possível fazer sem cluttering, todo código com erro é verificado.

Um grande número de módulos para extensão foram desenvolvidos para Python. Alguns são parte da biblioteca nativa da ferramenta, usável em qualquer programa Python (por exemplo, a biblioteca de matemática ou expressões regulares). Outros são específicos a uma plataforma particular ou para um ambiente (por exemplo, UNIX, ligação em rede de IP) ou fornecem funcionalidades de aplicação específica (tal como imagem ou processamento de som).

Python também fornece facilidades para introspecção, de modo que um debugger (ou outras ferramentas de desenvolvimento) para programas em Python podem ser escritas em Python mesmo. Há também um meio genérico de converter um objeto em uma linha de bytes, que podem ser usadas para implementar objetos persistentes assim como vários modelos distribuídos de objetos.

Freqüentemente, programadores se apaixonam ao conhecerem Python por causa do aumento de produtividade que a linguagem oferece. Desde que não há nenhum passo de compilação, o ciclo edita-testa-depura é incrivelmente rápido. Depurando programas em Python é fácil: um bug ou uma má entrada nunca causará uma falta de segmentação. Em vez disso, quando o interpretador descobre um erro, levanta uma exceção. Quando o programa não pega a exceção, o interpretador imprime um "stacktrace" (mensagem de erro). Um nível de fonte permite debugar inspeção de local e variáveis globais, avaliação de expressões arbitrárias, pondo pontos de interrupções, passando pelo código cada linha em seu tempo, e assim por diante. O debugger é escrito em Python, testando o poder da introspecção. Por outro lado, freqüentemente o meio rápido em depurar um programa é adicionar algumas declarações de impressão à fonte: o ciclo rápido edita-testa-depura faz esta simples aproximação muito eficiente.

3. A Filosofia

Tim Peters, um dos desenvolvedores do software Python, escreveu o lema da linguagem:

>>> import this The Zen of Python

Bonito é melhor que feio. Explícito é melhor que implícito. Simples é melhor que complexo. Complexo é melhor que complicado. Horizontalidade é melhor que verticalidade. Escasso é melhor que denso. Legibilidade conta. Casos especiais não são especiais o bastante para quebrar as regras. A natureza prática derruba a pureza. Erros nunca deveriam passar silenciosamente. A menos que explicitamente silenciasse. Diante da ambigüidade, recuse a tentação de adivinhar. Deveria haver um -- e preferentemente só um -- modo óbvio para fazer isto. Embora aquele modo pode não ser óbvio a menos que você seja holandês. Agora é melhor que nunca. Embora nunca é freqüentemente melhor que *copie* agora. Se a implementação é difícil para explicar, isto é uma idéia ruim. Se a implementação é fácil para explicar, pode ser uma idéia boa. Namespaces são uma grande idéia -- façamos mais desses!

4. A história do software

O desenvolvimento do Python começou em 1990 na CWI (Instituto de Matemática e Ciência da Computação) em Amsterdã na Holanda por Guido van Rossum, como um sucessor da linguagem ABC. Guido é o principal desenvolvedor do Python em conjunto com muitos outros colaboradores. Em 1995, Guido continuou seu trabalho com o Python na CNRI (Corporation for National Research Iniciatives) nos EUA e em 2000, Guido entrou para Be Open.com onde formou o time Be Open Pythonlabs. Em outubro do mesmo ano, o time do PythonLabs mudou para Digital Creations (Atualmente Zope Corporation). Em 2001, Python Software Foundation foi formada, uma organização não-comercial criada especificamente para trabalhar com propriedade intelectual em softwares Python. A Zope Corporation é um membro-patrocinador da PSF até hoje. Todos as versões do Python são software livre, mas nem todas são compatíveis a GPL. Veja o capítulo “Licença”.

Versão Atual Derivada da Ano Criação Compatível GPL? 0.9.0 thru 1.2 n/a 1991-1995 CWI Sim 1.3 thru 1.5.2 1.2 1995-1999 CNRI Sim 1.6 1.5.2 2000 CNRI Não 2.0 1.6 2000 Be Open.com Não 1.6.1 1.6 2001 CNRI Não 2.1 2.0+1.6.1 2001 PSF Não 2.0.1 2.0+1.6.1 2001 PSF Sim 2.1.1 2.1+2.0.1 2001 PSF Sim 2.2 2.1.1 2001 PSF Sim 2.1.2 2.1.1 2002 PSF Sim 2.1.3 2.1.2 2002 PSF Sim 2.2.1 2.2 2002 PSF Sim 2.2.2 2.2.1 2002 PSF Sim 2.2.3 2.2.2 2002-2003 PSF Sim 2.3 2.2.2 2002-2003 PSF Sim 2.3.1 2.3 2002-2003 PSF Sim 2.3.2 2.3.1 2003 PSF Sim 2.3.3 2.3.2 2003 PSF Sim 2.3.4 2.3.3 2004 PSF Sim

5. A Linguagem

5.1 Chamando o interpretador

O interpretador pode ser chamado pelo próprio comando python, em um terminal UNIX ou em DOS. Após a chamada aparecerá a informação de versão do Python, processador e sistema operacional atual:

Em Windows:

Python 2.3.4 (#53, May 25 2004, 21:17:02) [MSC v.1200 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>>

Em sistemas UNIX:

Python 2.3.3 (#2, May 25 2004, 22:37:26) [GCC 3.3.2 (Debian)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>>

Se o terminal escolhido apresentar esta nota e o típico três sinais de “maior-que” ‘>>>’ o Python está instalado corretamente e podemos fazer um teste digitando:

print 'hello world'

e na saída aparecerá hello world. Para sair digite “Control+D em UNIX e Control+Z em DOS ou Windows.

Em sistemas UNIX, a chamada de módulos externos existe uma linha em comum: #! seguido de um caminho para o executável que será passado por parâmetro para o Python, então a primeira linha de comandos será:

#!/usr/bin/envprint ‘hello world’

E em sistemas Windows é necessário criar um arquivo .bat dentro da pasta em uso dos módulos .py da seguinte maneira:

· Abra um editor de texto e coloque: PATH %PATH%;LOCAL_ONDE_ESTA_O_PYTHON · Exemplo: PATH %PATH%;C:/ARQUIV~1/Python · Salve este arquivo como exemplo: python.bat

5.2 Endentação

Endentação correta:

for entrar in dump:

Endentação errônea:

for entrar in dump: if titulo: texto = entrar.titulo else: texto = entrar.texto

5.3 Variáveis

Em Python, variáveis não precisam ser declaradas pela linguagem ser dinamicamente tipada, mas precisam ser iniciadas antes de serem utilizadas. Elas não tem valores fixos, podem receber qualquer tipo de dados como números, strings, funções, classes, etc; recebendo o tipo do conteúdo atual.

5.4 Identificadores

5.5 Tipos de dados

5.6 Operadores

5.7 Estrutura de dados

5.8 Controles de fluxos

5.9 Funções

5.10 Módulos

5.11 Exceções

5.12 Classes

5.12 Métodos

5.13 Análise Léxica do Interpretador Python

8. Interfaces gráficas (GUI)

8.1 Tkinter

Baseada em Tcl/Tk, a Tkinter acompanha a distribuição oficial do interpretador Python. Sua licença é a mesma do software Python, permitindo escrever livremente softwares comerciais, GPL ou sob qualquer outra licença. Pode atuar sob plataformas Unix, Linux, Windows, MacOS/X.

Vantagens: · Portabilidade - Programas escritos usando a Tkinter são portáveis livremente entre Linux, Unix, Windows e Mac, além da garantia de que qualquer um poderá executar o programa sem precisar instalar bibliotecas extras. · Aprendizado - Tem uma API simples de se aprender e fácil de lembrar. · Documentação - Muito bem documentada, com inúmeros tutoriais e referências de ótima qualidade disponíveis na Web. · Desvantagens: · Pobre - Faltam muitos componentes importantes, como notebooks e combo box (apesar de estes poderem ser feitos combinando outros componentes). Alguns elementos (listbox por exemplo) são incompletos ou limitados. Em compensação o componente Text é muito poderoso. · Aparência - A Tk usa uma função própria para acessar diretamente as funções do sistema operacional e desenhar seus próprios elementos na tela. Isso tem a vantagem de ser mais facilmente portável, mas a grande desvantagem de ter uma aparência diferente da nativa do sistema operacional. Pessoalmente, quando eu uso Tkinter me sinto 10 anos atrás, usando Windows 3.1 :). · Performance - O desempenho é horrível tendo em vista o que a biblioteca oferece.

8.2 PyGTK

PyGTK é um wrapper para o GIMP Toolkit (GTK), a biblioteca usada pelo GNOME e muitas outras aplicações para Linux. Tem ótimo desempenho, muitos elementos e visual agradável. Sua licença é LGPL e atua sob as plataformas Unix, Linux e Windows (ainda em desenvolvimento).

Vantagens: · Desempenho - PyGTK 0.X (para GTK 1.2) tem provavelmente o melhor desempenho entre todas as bibliotecas avaliadas aqui. A versão 2.0 (para gtk 2.X) não tem o mesmo desempenho, mas é bem satisfatória. · Documentação - Bem documentada. Existem bons tutoriais para ambas as versões. Apesar de não haver uma referência completa para PyGTK 0.X, existe uma muito boa para a versão 1.9X, 2.X. · API - PyGTK usa uma API eficiente, baseada em propagação de sinais e callbacks. Um elemento qualquer emite um sinal, que é propagado "pra cima" até ser capturado e gerar a chamada de um callback. · IDE - Possui uma ferramenta para construção de interfaces, o Glade, que permite gerar uma referência em XML da interface, que pode ser usado diretamente pela biblioteca.

Desvantagens: · Portabilidade - Rodar aplicações usando PyGTK em Windows é uma tarefa complicada.

8.3 wxPython

wxPython é um wrapper da biblioteca wxWindows. Assim como a Tkinter, as aplicações são facilmente portáveis. A diferença é que a wxWindows utiliza um wrapper sobre a interface gráfica padrão do sistema operacional (GTK em Linux, MFC em Windows), o que permite que as aplicações sejam mais facilmente portáveis e que tenham a aparência de uma aplicação nativa. Em compensação, o desempenho cai significantemente com o acréscimo de mais uma camada entre a aplicação e o sistema operacional. Sua licednça é GPL e atua sob plataformas Unix, Linux, Windows, MacOS/X.

Vantagens: · Portabilidade - Aplicações escritas em wxPython rodam praticamente sem problemas em várias plataformas. Esse é provavelmente o principal (senão o único) motivo pelo qual está se tornando bem popular. · Componentes ricos - Nesse ponto a wxPython é imbatível. Há todo tipo de componentes, prontamente disponíveis, de telas a caixas de texto que interpretam HTML e até mesmo a Scintilla. · Documentação - o wxPython vem com um demo da maioria dos seus widgets que serve como teste e exemplo de uso. · Desvantagens: · Desempenho - A performance das aplicações em si não é ruim. O problema é o uso de memória e o tempo de inicialização. · Instabilidade - Mesmo estando ativamente em desenvolvimento, ainda tem alguns problemas de estabilidade. No mínimo 10% das mensagens na lista wxPython são reportando bugs. · API complicada - wxWindows é uma biblioteca com quase 10 anos de idade, que foi sendo remendada precariamente com o passar dos anos. Apesar da wxPython ser um wrapper excelente, muito bem escrito, os problemas da wxWindows aparecem: API completamente diferente entre alguns componentes e outros, números de ID, macros, etc. Porém tem melhorado bastante a partir da versão 2.5 e o wrapper wxPython oculta bastante a complexidade e idiossincrasias do wxWindows.

8.4 PyQT

PyQT é um wrapper para a biblioteca QT, que é a base do KDE (ambiente desktop para Linux). Muitas das vantagens e desvantagens do PyQT coincidem com as do PyGTK, pelo fato do GNOME e KDE serem "concorrentes" e se equivalerem em muitos aspectos. Existe uma biblioteca complementar, PyKDE, que atua sobre elementos específicos do KDE, como por exemplo interação com o kicker e a barra de tarefas. A licença segue o sistema do QT, GPL para programas sem fins comerciais nas plataformas UNIX/X11 (Linux etc). Para Windows, apenas uma licença comercial está disponível. Atua sob plataformas Unix, Linux, Windows, Mac OS/X.

Vantagens: · Desempenho: Como o Qt foi construído de forma a facilitar o desenvolvimento de wrappers, o desempenho do PyQT é bem próximo do Qt quando usado com C++. · Fácil de aprender: A biblioteca Qt é famosa por ser extremamente bem documentada, pois a própria Trolltech possui um time de escritores técnicos. Apesar da documentação ser para C++, é fácil "traduzir" os exemplos para Python. · API: A API do PyQT utiliza um sistema de "slots" e "sinais", levemente similar ao sistema de sinais e callbacks utilizado por outras bibliotecas. A API é bastante rica e coerente. · IDE: Possui uma IDE muito boa para criação de interfaces, chamada QT Designer. O programa pyuic transforma essas definições de interfaces em código Python, que pode então ser usado por outros programas. · Desvantagens: · Portabilidade: Usar o PyQT é excelente para programas Linux (em especial para rodar em cima do KDE, embora isso não seja obrigatório), mas como não existe licença GPL para Windows, provavelmente não é uma boa idéia utilizá-lo nessa plataforma. No ambiente Windows existem DLLs disponíveis para download da Qt 2.x para fins não comerciais, sobre as quais se encontra disponível também o PyQT para Windows.

8.5 PyFLTK

FLTK (pronuncia-se fulltick) significa Fast Light Toolkit ou Toolkit rápido e leve. Ele cumpre exatamente o que promete, é rapido e não compromete a memória (você pode usar para programar para um 386 com 4Mb). A API utiliza chamadas ao sistema gráfico em uso para criar seus componentes, o que os mantem idênticos, indepente do sistema operacional (aliás, de uma maneira semelhante ao Tk, só que quando bem configurado, ficam bonitos) e isso aumenta a portabilidade. FLTK roda em mais plataformas que o próprio Python (existe inclusive uma versão para DOS 16 bits). Sua licença é LGPL e atua sob plataformas Linux, FreeBSD, Windows, Solaris, Amiga, Dos, MacOS, OpenBSD.

Vantagens: · Rápido e portável, o aprendizado também é bem simples, tão fácil ou mais que o Tk, só que ele é mais completo.

Desvantagens: · A principal desvantagem dele é no quesito posicionamento de widgets, ele só trabalha na base do x,y, o que torna a programação impossível sem um construtor de interface (ou, pelo menos, muito chata). Em C++ tem o FLUID, que vem com ele, só que o pyconvert, que vem no PyFLTK, não consegue converter todo o código da saída do FLUID para Python (parece que ele não converte classes e alguns outros recursos), o que torna desagradável a programação (primeiro, desenha-se toda a janela, depois gera-se o código e transforma-se o mesmo em objeto, então, se quiser mudar a janela, tem que ser na mão).

8.6 AnyGUI

Anygui é uma biblioteca que ainda se encontra em estágio muito inicial de desenvolvimento, mas é mencionada aqui a título de curiosidade. Se um dia chegar a ficar "pronta", será muito atraente e provavelmente vai tomar o lugar da Tkinter na biblioteca padrão. É escrita puramente em Python e funciona como um frontend para as outras bibliotecas disponíveis. Atualmente ela suporta PythonWin, Tkinter, wxPython, Swing (Jython), PyGTK, Bethon (BeOS), PyQT e até mesmo Curses ou texto puro, quando nenhuma outra biblioteca está disponível. A idéia é escrever uma aplicação usando Anygui e depois poder usá-la em qualquer plataforma com qualquer biblioteca. Sua licença é MIT License.

Vantagens: · Portabilidade - A Anygui permite executar uma aplicação em qualquer plataforma suportada pela Python sem alterações, usando qualquer biblioteca disponível no sistema.

Desvantagens: · Pobre - Obviamente, os componentes têm de ser nivelados por baixo. Não é possível ter acesso a um componente que existe em uma biblioteca mas não nas outras, por isso, ela se presta apenas para projetos simples.

9. Licença

A licença Python impõe várias restrições ao que se pode fazer com o Python. Todo o código-fonte está sob copyright pela Python Software Foundation (PSF). Muitas versões foram feitas por vários criadores mas a nota de copyright vale para todas. Note que está é uma visão geral, leia todo a documentação da licença para ver qual termo se encaixa a seu uso. · Python é absolutamente livre, even for commercial use (including resale). Você pode vender um produto escrito em Python e também incluir o interpretador Python. Nenhuma licença precisa ser paga para ser usada. · A Iniciativa Código-fonte Aberto (Open Source Iniciative) certifica a Licença Python como código-fonte aberto. · There is no GPL-like "copyleft" restriction. Distributing binary-only versions of Python, modified or not, is allowed. There is no requirement to release any of your source code. You can also write extension modules for Python and provide them only in binary form. · However, the Python license is compatible with the GPL, according to the Free Software Foundation. · You cannot remove the PSF's copyright notice from either the source code or the resulting binary.

10. Comparações entre linguagens

Guido van Rossum escreveu que Python é freqüentemente comparada a outras linguagens de programação interpretadas como Java, Javascript, Perl, Tcl, ou Smalltalk. Comparações com C++, Common Lisp e Scheme também são. Na prática, a linguagem de programação é freqüentemente escolhida pelas condições e aplicações desejadas em cada projeto em especial. Primeiro um histórico estatístico das 10 linguagens de programação mais usadas. (Estatística gerada pelo site http://www.tiobe.com/tpci.htm):

Abaixo de cada explicação das comparaçções existe um exemplo de implementação de código, os exemplos foram retirados de http://www2.latech.edu/~acm/helloworld/ e todos imprimem na tela a mensagem hello world. Em Python o código seria:

print ‘hello world’ hello world

10.1 Java

Programas Python são geralmente expected to run slower than Java programs, but they also take much less time to develop. Python programs are typically 3-5 times shorter than equivalent Java programs. This difference can be attributed to Python's built-in high-level data types and its dynamic typing. For example, a Python programmer wastes no time declaring the types of arguments or variables, and Python's powerful polymorphic list and dictionary types, for which rich syntactic support is built straight into the language, find a use in almost every Python program. Because of the run-time typing, Python's run time must work harder than Java's. For example, when evaluating the expression a+b, it must first inspect the objects a and b to find out their type, which is not known at compile time. It then invokes the appropriate addition operation, which may be an overloaded user-defined method. Java, on the other hand, can perform an efficient integer or floating point addition, but requires variable declarations for a and b, and does not allow overloading of the + operator for instances of user-defined classes.

For these reasons, Python is much better suited as a "glue" language, while Java is better characterized as a low-level implementation language. In fact, the two together make an excellent combination. Components can be developed in Java and combined to form applications in Python; Python can also be used to prototype components until their design can be "hardened" in a Java implementation. To support this type of development, a Python implementation written in Java is under development, which allows calling Python code from Java and vice versa. In this implementation, Python source code is translated to Java bytecode (with help from a run-time library to support Python's dynamic semantics).

Exemplo de código:

}

10.2 PHP

Python e PHP são interpretadas, linguagens de alto-nível com tipagem dinâmicas, códigos aberto, são suportadas por grandes comunidades na internet, são fáceis de aprender (comparadas ao Java), são fáceis para serem extendidas a C, C++ e Java, são extremamente portáveis.

Mas Python não existe várias habilidades que PHP existem como: · syntax from C and Perl, with lots curly braces and dollar signs. · the 'switch' statement and 'do ... while' construct. · increment and decrement and assignment operators (assignment is a statement only in Python). · the ternary operator/statement (... ? ... : ...). · schizophrenic tableau of function names. The builtin library has a wide variety of naming conventions. There are no namespaces, so functions often have prefixes to denote their source (but often not). Functions are often placed into classes to simulate namespaces. · a very casual language, where globals are often used to pass arguments, all variables are "set" (to NULL), and a somewhat weak type system (not to be confused with dynamic types). · an expedient (commonly installed) environment. · aliases ('$a =& $b' means that when $b changes, $a changes also). · one array type that doubles as a list and a dictionary. Dictionary keys are iterated in their original order. E, também, o PHP não tem inúmeras habilidades que Python possui: · a general purpose programming language (not just for the web) · indentation is used to mark out block structure rather than curly braces · namespaces and modules · a small core · very clear, concise, and orthogonal syntax · it is self documenting with docstrings and pydoc · keyword arguments to functions and methods, easy support for default arguments · true object orientation and 'first class' classes and functions · classes are used extensively in the standard library · a notion of private attributes · multiple inheritance · object-oriented file handling · method chaining · excellent introspection · everything is a reference! (references are painful in PHP) · one 'del' statement for all data types. PHP has 'unset' for variables and something else for array members. · consistent case sensitivity (PHP does for variables, but not functions) · a simple array slicing syntax · lambdas and other builtin functional programming constructs · iterators · structured exception handling · operator overloading · SWIG? integration · threading · an excellent profiler, plus several debuggers and IDEs · lots of high-level data types (lists, tuples, dicts, mx.?Date Times, ?Num Py arrays, etc.) · differentiation between arrays (lists) and associative arrays (dictionaries). · cached byte-code compilation (available for $980 in PHP!) · a standardized database API · support for all major GUI frameworks · strong internationalization and UNICODE support · maturity, stability and upward-compatibility. · tends to lead to much more scalable applications -- importing modules is safer than textually including code as in PHP: global variables are not used to exchange information.

Retirada de: http://wiki.w4py.org/pythonvsphp.html

Exemplo de código:

<? print("Hello World") ?>

10.3 Javascript

Python's "object-based" subset is roughly equivalent to Javascript. Like Javascript (and unlike Java), Python supports a programming style that uses simple functions and variables without engaging in class definitions. However, for Javascript, that's all there is. Python, on the other hand, supports writing much larger programs and better code reuse through a true object-oriented programming style, where classes and inheritance play an important role.

Exemplo de código:

<script language="JavaScript">

</script>

10.4 Perl

Python and Perl come from a similar background (Unix scripting, which both have long outgrown), and sport many similar features, but have a different philosophy. Perl emphasizes support for common application-oriented tasks, e.g. by having built-in regular expressions, file scanning and report generating features. Python emphasizes support for common programming methodologies such as data structure design and object-oriented programming, and encourages programmers to write readable (and thus maintainable) code by providing an elegant but not overly cryptic notation. As a consequence, Python comes close to Perl but rarely beats it in its original application domain; however Python has an applicability well beyond Perl's niche.

Exemplo de código:

print "Hello World\n";

10.5 C++

Almost everything said for Java also applies for C++, just more so: where Python code is typically 3-5 times shorter than equivalent Java code, it is often 5-10 times shorter than equivalent C++ code! Anecdotal evidence suggests that one Python programmer can finish in two months what two C++ programmers can't complete in a year. Python shines as a glue language, used to combine components written in C++.

Exemplo de código:

#include <iostream.h>

11. Elogios

Industrial Light & Magic "Python é o papel chave em nossa linha de produção. Sem ele um projeto do tamanho de Guerra nas Estrelas: Episódio II teria sido muito difícil de ser lançado. De interpretação em massa a processamento em lote por composição, Python une todas coisas juntas," disse Tommy Burnette, Diretor Técnico Sênior, da Industrial Light & Magic. "Python está em toda parte na Industrial Light & Magic. É usada para estender as capacidades de nossas aplicações, assim como fornecer a ligação entre elas. Cada imagem que nós criamos envolvemos Python em algum lugar do processo, "Philip Peterson, Engenheiro Principal, Pesquisa & Desenvolvimento, Industrial Light & Magic.

Google Inc. "Python foi uma parte importante da Google desde que o começo, e vem crescendo e desenvolvendo-se dentro da empresa. Hoje dúzias de engenheiros da Google utilizam Python, e nós procuramos mais pessoas com habilidades nesta linguagem." disse Peter Norvig, Diretor de Qualidade de Busca na Google, Inc.

NASA "NASA usa Python para implementar um repositório CAD/CAE/PDM modelo de gerenciamento, integração, e um sistema de transformação com enormes infraestruturas. Nós escolhemos Python porque ela provê uma produtividade máxima, códigos são limpos e fácil de manter de alterar e explicar. Excelente capacidade de integração com aplicações em muitas plataformas. Todas as suas características são essenciais para construções eficientes, flexíveis, escalonadas e integráveis, é o que nós precisávamos”, disse Steve Waterbury, Líder do Grupo de Software na NASA STEP Testbed.

EVE Online "Python enabled us to create EVE Online, a massive multiplayer game with a scale never before seen in the industry, in record time. EVE Online server cluster, servers close to 10.000 simultaneous players in a shared space simulation, most of which is created in Python. The flexibilities of Python have enabled us to quickly improve the game experience based on player feedback," said Hilmar Veigar Petursson, chief technology officer of CCP, the developers of EVE Online.

Home Gain "Home Gain maintains its commitment to continual improvement through rapid turnaround of new features and enhancements. Python supports this short time-to-market philosophy with concise, clear syntax and a powerful standard library. New development proceeds rapidly, and maintenance of existing code is straightforward and fast," said Geoff Gerrietts, Software Engineer, Home Gain.com.

Thawte Consulting "Python makes us extremely productive, and makes maintaining a large and rapidly evolving codebase relatively simple," said Mark Shuttleworth.

University of Maryland "I have the students learn Python in our undergraduate and graduate Semantic Web courses. Why? Because basically there's nothing else with the flexibility and as many web libraries," said Prof. James A. Hendler.

EZTrip.com "The travel industry is made up of a myriad supplier data feeds all of which are proprietary in some way and are constantly changing. Python repeatedly has allowed us to access, build and test our in-house communications with hundreds of travel suppliers around the world in a matter of days rather then the months it would have taken using other languages. Since adopting Python 2 years ago, Python has provided us with a measurable productivity gain that allows us to stay competitive in the online travel space," said Michael Engelhart, CTO of EZTrip.com.

Paul Graham "Paul Graham has posted a new article to his website that he called "The Python Paradox" which refines the statements he made in "Great Hackers" about Python programmers being better hackers than Java programmers. He basically says that since Python is not the kind of language that lands you a job like Java, those who learn it seek more than simply financial benefits, they seek better tools. Very interesting read."

Eric S. Raymond http://www.linuxjournal.com/article.php?sid=3882

12. Histórias de sucesso

12.1 Indústria

· Industrial Light & Magic (http://www.ilm.com), produz filmes da série Star Wars, usando extensivamente Python para computação gráfica nos processos de produção dos filmes. · Google Inc. (http://www.google.com), o maior site de busca da internet, é desenvolvido em Python. · Yahoo! (http://www.yahoo.com) usa Python para o site de grupos. · The Inktomi (http://www.inktomi.com) usa Python para seu site de busca. · IBM (http://www.ibm.com) e consequentemente Philips (http://www.philips.com), entre outras linguagens e aplicativos, usam Python para criar a lógica da prática de negócios para a produção de ferramentas de controle de aplicativos. · Disney (http://www.disney.com) usa Python para produção de aplicativos de animação. · Wolfgang Puck Soups (http://www.wolfgangpucksoup.com) usa Python na infra-estrutura de seus bens de consumo duráveis fabricando pela companhia. · Red Hat Linux (http://www.redhat.com) usa Python para instalação, configuração e gerenciamento de pacotes. · Real Networks (http://www.real.com) usa extensivamente Python em testes do sistema e em testes cliente/servidor para plataformas de apoio. · Strakt (http://www.straky.com) usa Python para construir a próxima geração de seu rapidíssimo ambiente colaborativo. · Object Domain (http://www.objectdomain.com) é uma implementação em Java, compreendendo ferramenta CASE e usando Python para suporte. · Totally Games (http://www.totallygames.com) usa Python para muitas características de jogos como Star Trek Bridge Commander. · The7 Afilias INFO (http://www.afilias.info) usa Python como primeira linguagem, uso genérico de alto nível com aplicações .COM desde 1985. · The Viacom Television Stations Group (http://www.paramountstations.com) usa Python para vários sites de estações de TV. · BEA (http://www.bea.com) usa Python em testes de softwares e-comércio. · Plone Inc. (http://www.plone.org) usa Python para desenvolver seu conhecido software colaborativo Plone. · Zope Corporation (http://www.zope.org) usa Python para diversa aplicações como ZOBD (Banco de Dados), CMF (aplicações de baixo nível), etc.

12.2. Ciência

· NASA (http://www.nasa.gov) usa Python em muitos dos seus projetos, incluindo um sistema CAD/CAM e um módulo gráfico usado em missões de planejamento do espaço. · The National Institutes of Health (http://www.ncrr.nih.gov) e Case Western Rerserve University (http://www.cwru.edu/) são building cutting-edge genetic analysis software with Python. · The National Weather Service (http://www-md.fsl.noaa.gov/eft) usa Python para preparar previsões meteorológicas. Python também é usado para este propósito no Swedish Meteorological and Hydrological Institute e na TV Sueca TV4. · Lawrence Livermore National Laboratories (http://www.llnl.gov) é baseado em um novo ambiente numérico de engenharia em Python, substituindo uma outra linguagem em funcionamento a mais de 10 anos. · The Theoretical Physics Division at Los Alamos National Laboratory (http://bifrost.lanl.gov/MD/MD.html) usa Python para controlar códigos de grande escala de física em super-computadores paralelos, servidores e clusters.

12.3 Governo

· The US Navy (http://www.navy.mil) usa Python e Zope para seu sistema de website. · The US Dept. of Agriculture (http://www.usda.gov) usa Python e Zope para grande quantidade de colaborações. · SERPRO (http://www.serpro.gov.br) O Serviço Federal de Processamento de Dados (SERPRO) é a maior empresa pública de prestação de serviços em tecnologia da informação do Brasil, utiliza Python em seu site para o desenvolvimento dos aplicativos Zope e Plone, que geram o site.

13. Framework

Este framework diz respeito ao software Python Wikipedia Robot Framework, primeiro é necessário uma pequena explicação do que é a Wikipedia depois o que é o framework, para que serve e como usar.

13.1 Wikipedia

A Wikipédia é uma enciclopédia livre baseada em wiki e escrita por voluntários. Livre aqui significa que qualquer artigo da Wikipédia pode ser copiado e modificado desde que os direitos de cópia e modificação sejam preservados. O conteúdo da Wikipédia está sob licença GFDL.

A Wikipédia é gerenciada e operada pela Wikimedia Foundation, organização sem fins lucrativos. O projeto iniciou-se em 15 de janeiro de 2001 e atualmente abriga mais 1 milhão de artigos em mais de 100 idiomas, sendo aproximadamente 380 mil artigos em língua inglesa e 25 mil em língua portuguesa.

A Wikipédia foi fundada por Jimmy Wales e Larry Sanger, tendo sua origem no projeto Nupedia. Ambos os projetos foram inicialmente financiados por capitais privados dos próprios fundadores.

O modelo de funcionamento da Wikipédia baseia-se num wiki - uma rede de páginas web que podem ser modificadas através de um browser comum como o Internet Explorer ou Mozilla. Este é o fator que distingue a Wikipédia de todas as outras enciclopédias: qualquer pessoa pode modificar qualquer artigo, sendo cada leitor um potencial colaborador do projeto.

Na Wikipédia, os artigos são escritos de forma colaborativa. A Wikipédia é suportada por um software próprio desenvolvido por voluntários e sob licença GNU GPL que é o Mediawiki. Vários autores podem trabalhar em conjunto editando sucessivamente a mesma página. Um colaborador pode assumir de entre vários níveis de colaboração. Pode escrever artigos, corrigir artigos, corrigir textos e erros ortográficos, participar esporadicamente, produzir software, traduzir artigos, divulgar ou participar nas discussões sobre o projeto.

13.2 Python Wikipedia Robot Framework

Sendo projetos colaborativos e voluntários e sabendo que este tipo de trabalho requer tempo e muito trabalho repetitivo, surgiu um framework inicialmente para atualizar elos de interwiki usando bots, ou robôs, como é dito em outras línguas. Não seria precisamente um robô, que faz-se tudo sozinho. O robô da Wikipedia seria um agente de manipulação de artigos precisamente. É um desafio manter links de um artigo em uma língua ligadas a todas as versões desse artigo em outras línguas. Em tempos, uma nova versão é introduzida, mudanças de nomes, anulações, logo, todas as outras versões devem ser atualizadas. Ao longo do projeto foram criando outros módulos para lidarem com upload de arquivos, desambiguação entre artigos, introduzir categorias nas páginas, transformar tabelas de html para wiki, etc.

O site do desenvolvimento do projeto é (http://sourceforge.net/projects/pywikipediabot). Os outros módulos podem ser encontrados no repositório do projeto (http://sourceforge.net/cvs/?group_id=93107). O bot foi iniciado por Rob W.W. Hooft em 2003, escrito em linguagem Python e atualmente desenvolvido por mais de 14 voluntários (http://www.sourceforge.net/project/memberlist.php?group_id=93107). Este robô tem uma comunidade de operadores em crescimento. Atualmente existem mais de 25 bots em todas as línguas da Wikipedia.

13.2.1 Usando bots no Windows

Primeiro é necessário o interpretador do programa Python que encontra-se aqui: http://www.python.org/download Depois precisa-se dos módulos do Pywikipediabot, baixe em: http://prdownloads.sourceforge.net/pywikipediabot/pywikipediabot.zip?download. Depois do download extraia os arquivos .zip para uma pasta dentro do diretório raiz C:/, por exemplo, c:/pywikipediabot.

Agora você irá configurá-lo, entre na pasta do Pywikipediabot e procure o módulo config.py, clique no IDLE (botão direito do mouse, Edit with IDLE) e altere as linhas de comando seguintes:

Entre no MS DOS e vá até o diretório onde você escolheu que ficasse a pasta pywikipediabot, por exemplo, c:/pywikipediabot, depois digite seu login acessando o módulo login.py. Digite: python login.py Digite seu login e senha e você está logado. Agora você pode acessar os módulos da pasta pywikipediabot pelo simples comando python NOME_DO_ARQUIVO.py.

13.2.2 Usando bots no Linux

A maioria das distribuições do Linux já veêm com o interpretador do Python nativo em seus sistemas. Para obter os módulos do Pywikipediabot baixe: http://prdownloads.sourceforge.net/pywikipediabot/snapshot-20040817.tar.gz?download Extraia os arquivos do arquivo.tar.gz para uma pasta a sua escolha, por exemplo, /home/pywikipediabot. Entre no Console ou em algum terminal e vá até o diretório onde o Pywikipediabot está, digite seu login acessando o módulo login.py. Digite: python login.py e está logado.

Para rodar algum módulo digite: python nome_do_módulo.py

13.3 Módulos

13.3.1 Interwiki.py

Este módulo irá procurar as ligações para outras wikipédias que já existirem o nome da página. Então ele irá acessar cada uma das páginas a que correspondem estas ligações a fim de procurar mais ligações e assim sucessivamente, até que cada ligação já tenha sido investigada. Para procurar as ligações para outras wikipédias para uma determinada página (digamos, nome da página), basta rodar: python interwiki.py nome da página Percebe-se que se nome da página não possuir ligação alguma, o programa não irá achar mais nenhuma ligação para outra wikipédia. Devemos então achar uma página correspondente em outra wikipédia (que no nosso exemplo vai ser achada em nome da página em inglês na en.wikipedia.org). O comando a ser usado é: python interwiki.py nome da página -hint:en:nome_da_página_em_inglês

13.3.2 Table2wiki.py

Este módulo transforma tabelas do formato html para o formato wiki que é mais simples para a edição. O comando a ser usado é: python table2wiki.py nome da página As páginas a serem alteradas também podem ser lidas em um arquivo texto (lista.txt para o nosso exemplo): python table2wiki.py -file:lista.txt

13.3.3 Category.py

O módulo category.py serve a muitas utilidades. Movendo (ou renomeando) categorias, se todos os artigos que estiverem em categoria 1 deveriam estar em categoria 2, basta rodar: python category.py rename Então o programa irá perguntar primeiro qual categoria a ser abandonada (categoria 1) e depois a categoria a ser enchida (categoria 2). Categorizando uma lista, o programa também pode categorizar um lista de páginas ou todas as páginas que apontam para algum artigo. Usando: python category.py add e informar onde buscar a lista. O script abaixo faz a inclusão de categorias em artigos, primeiro ele pede um artigo que contenha uma lista de artigos para incluir categorias nos artigos que há contém, facilitando o trabalho.

def add_category(sort_by_last_name = False):


'


'

13.3.4 Solve_disambiguation.py Serve para desambiguar páginas rapidamente. Fazendo redirecionamentos, se todos os artigos que apontam para um redirecionamento (artigo 1) deveriam apontar para o artigo-alvo do redirecionamento (artigo 1), basta rodar: python solve_disambiguation.py -just -always:0 -pos:artigo_1 atigo 1

13.3.5 Find.py

# -*- coding: utf-8 -*-Este bot procura algum texto no SQL dump.Por favor faça o download da base dadados corrente em http://download.wikimedia.org).Módulos necessários: wikipedia.py e sqldump.pyVeja: http://cvs.sourceforge.net/viewcvs.py/pywikipediabot/pywikipedia'''## Distribuído sob os termos da Licença da Python Software Foundation.## Módulos nativos do Pythonfrom future import generatorsimport sys, re, codecs#Módulos da Biblioteca Wikipedia Pythonimport wikipedia, sqldump# Lendo o sqldump.py e o wikipedia.pydef read_pages_from_sql_dump(sqlfilename, title): dump = sqldump.SQLdump(sqlfilename, wikipedia.myencoding()) for entry in dump.entries(): if title: text=entry.title else: text=entry.text skip_page = False if namespace != -1 and namespace != entry.namespace: continue if not skip_page: for old in replacements.keys(): if regex: old = re.compile(old) if old.search(text): yield wikipedia.PageLink(wikipedia.getSite(), entry.full_title()) break else: if text.find(old) != -1: yield wikipedia.PageLink(wikipedia.getSite(), entry.full_title()) break# Acessando o arquivo dump.sqldef generator(source, replacements, exceptions, regex, namespace, title, textfilename = None, sqlfilename = None, pagenames = None): source == 'sqldump' for pl in read_pages_from_sql_dump(sqlfilename, title): yield plsource = Nonereplacements = {}exceptions = []regex = Falsetitle = Falsecount = Nonesqlfilename = 'dump.sql'textfilename = pagenames = []namespace = -1# Pergunta buscaif count == None: old = wikipedia.input(u'Texto a buscar (Cuidado! Casa e acento sensitivos):') new = " " replacements[old] = new# Salva a busca no arquivo find.txtcount = 0arq = codecs.open('find.txt', 'w', 'utf-8')for pl in generator(source, replacements, exceptions, regex, namespace, title, textfilename, sqlfilename, pagenames): arq.write("# %s \n" % pl.linkname()) count +=1 print str(count), pl.linkname()arq.close()

14. Aplicações Práticas · Skencil - programa de desenho vetorial (http://sketch.sourceforge.net) · Bittorrent - Famoso programa P2P (http://www.bitconjurer.org/BitTorrent). · Zope - Servidor de aplicações (http://www.zope.org). · Plone - Gerenciador de conteúdo (ou CMS, de content management system) desenvolvido em Python e Zope (http://www.plone.org). · Gramps - Análise de Genealogia (http://gramps.sourceforge.net). · Pygame - Módulo de jogos gráficos (http://www.pygame.org).

15. Bibliografia

15.1 Livros · Mergulhando no Python (Dive Into Python) http://www.zorked.net/dive/toc/index.html · How to Think Like a Computer Scientist, Learning with Python http://ibiblio.org/obp/thinkCSpy/ · Como Pensar como um Cientista da Computação em Python (Em tradução) http://pensarpython.incubadora.fapesp.br/portal · Guia de Consulta Rápida Python - Marco Catunda 15.2 Tutoriais · http://async.com.br/projects/python/pnp/python.html python · http://pygtk.org/pygtk2tutorial-es/index.html faq pygtk · http://async.com.br/faq/pygtk/index.py?req=index faq pygtk · http://pythonbrasil.com.br/moin.cgi/OsvaldoSantanaNeto <- python vs.java · http://atlas.ucpel.tche.br/~barbosa/consico/consico2/artigos/a2.pdf compilador e interpretador · http://portaldaprogramacao.com/index_linguagem.asp?c=22 · http://primates.ximian.com/~sandino/python-glade/ <- python-glade · http://www.awaretek.com/tutorials.html coletânea de tutoriais 15.4 Links · http://python.org · http://planetpython.org · http://pythonbrasil.com.br · http://pygtk.org · http://pyzine.com · http://starship.python.net/crew/theller/pyhelp.cgi pyhelp · http://news.gmane.org/gmane.comp.python.brasil arquivos da lista python-br(asil) · http://www.pycs.net python community server · http://python.org/doc/Comparisons.html · http://idi.ntnu.no/~mlh/python/praise.html · http://scriptbrasil.com.br/forum/index.php?showforum=38 · http://python-in-business.org/success/ · http://pythonology.org · http://www.intertwingly.net · http://twistedmatrix.com/wiki/python/FrontPage Python Wiki Wiki · http://www.pythonware.com/ · http://pythonnotes.blogspot.com · http://www.vex.net/parnassus/ · http://activestate.com/Python.plex Active Python · http://aspn.activestate.com/ASPN/Python/Cookbook Python Cookbook · http://www.strout.net/python · http://www.portaldaprogramacao.com/artigos2.asp?n=230 Análise Léxica do interpretador Python · http://www.vivaolinux.com.br/scripts/categoriaIndex.php?codigo=5 · http://www.freenetpages.co.uk/hp/alan.gauld/port/tutcont_por.htm · http://lula.dmat.furg.br/~python/aspectos.html - Interpretação e compilação com Python · http://starship.python.net/crew/aahz/OSCON2001/threads.pdf - Texto sobre Threads · http://gcn.com/vol1_no1/daily-updates/28026-1.html · http://www.objectis.net - servidor de graça de plozopy · http://www.tiobe.com/tpci.htm - estatísticas de linguagem · http://www.freedom-to-tinker.com/tinyp2p.html - módulo p2p em py - com 15 linhas · http://www.forum.nokia.com/main/0,,034-821,00.html - nokia usa python para celulares

Sobre este documento

/!\ O software que gera esta página é o MoinMoin (http://moinmoin.wikiwikiweb.de), um software livre desenvolvido em Python, lógico. :)

SobrePython (zuletzt geändert am 2013-07-26 22:19:32 durch p5DE7AEAD)