Conteúdo
0. Conteúdo 1. Introdução 2. O que é Python 3. A Filosofia do Python 4. A história do software 5. A Linguagem 6. O Interpretador Python 7. Implementações 8. Comparações entre interfaces gráficas (GUI) 9. Licença 10. Comparações entre linguagens 11. Elogios 12. Histórias de sucesso 13. Sistema Especialista 14. Aplicações Práticas 15. Bibliografia
1. Introdução
O desenvolvimento do Python começou em 1990 na CWI (Instituto de Matemática e Ciência da Computação) em Amsterdam na Holanda por Guido van Rossum, e continuou liderada pela Python Software Foundation (http://www.python.org/psf).
Python tem um pleno leque de operações de string (incluindo expressções regulares), e libera o operador da maioria do trabalho emcima da gerência de memória. Estas e outras características fazem ela 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 de extensão foram desenvolvidos para Python. Alguns são parte da biblioteca nativa de ferramentas, usável em qualquer programa Python (por exemplo, a biblioteca de matemática e expressões regulares). Outros são específicos a uma plataforma particular ou para ambiente (por exemplo, UNIX, ligação em rede de IP ou X11) 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 profiler (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 objeto.
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, aliás, tudo em Python é um objeto. Tipada dinamicamente não se declarara 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 sintaxe é fácil de ser compreedida e rápida de ser desenvolvida; a construção 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 ou Java.
Freqüentemente, programadores caem de amor 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 "stack trace" (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 se, 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 do Python
>>> import this "The Zen of Python" por Tim Peters 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 bastante para quebrar as regras. A natureza prática derruba a pureza. Erros nunca deveriam passar silenciosamente. A menos que explicitamente silenciasse. Em face a ambigüidade, recuse a tentação para 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 *right* agora. Se a implementação é dura 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
Python was created in the early 1990s by Guido van Rossum at Stichting Mathematisch Centrum (CWI, see http://www.cwi.nl/) in the Netherlands as a successor of a language called ABC. Guido remains Python's principal author, although it includes many contributions from others.
In 1995, Guido continued his work on Python at the Corporation for National Research Initiatives (CNRI, see http://www.cnri.reston.va.us/) in Reston, Virginia where he released several versions of the software.
In May 2000, Guido and the Python core development team moved to BeOpen.com to form the BeOpen PythonLabs team. In October of the same year, the PythonLabs team moved to Digital Creations (now Zope Corporation; see http://www.zope.com/). In 2001, the Python Software Foundation (PSF, see http://www.python.org/psf/) was formed, a non-profit organization created specifically to own Python-related Intellectual Property. Zope Corporation is a sponsoring member of the PSF.
All Python releases are Open Source (see http://www.opensource.org/ for the Open Source Definition). Historically, most, but not all, Python releases have also been GPL-compatible; the table below summarizes the various releases.
http://www.python.org/doc/current/ref/node104.html
Release |
Derived from |
Year |
Owner |
GPL compatible? |
0.9.0 thru 1.2 |
n/a |
1991-1995 |
CWI |
yes |
1.3 thru 1.5.2 |
1.2 |
1995-1999 |
CNRI |
yes |
1.6 |
1.5.2 |
2000 |
CNRI |
no |
2.0 |
1.6 |
2000 |
BeOpen.com |
no |
1.6.1 |
1.6 |
2001 |
CNRI |
no |
2.1 |
2.0+1.6.1 |
2001 |
PSF |
no |
2.0.1 |
2.0+1.6.1 |
2001 |
PSF |
yes |
2.1.1 |
2.1+2.0.1 |
2001 |
PSF |
yes |
2.2 |
2.1.1 |
2001 |
PSF |
yes |
2.1.2 |
2.1.1 |
2002 |
PSF |
yes |
2.1.3 |
2.1.2 |
2002 |
PSF |
yes |
2.2.1 |
2.2 |
2002 |
PSF |
yes |
2.2.2 |
2.2.1 |
2002 |
PSF |
yes |
2.2.3 |
2.2.2 |
2002-2003 |
PSF |
yes |
2.3 |
2.2.2 |
2002-2003 |
PSF |
yes |
2.3.1 |
2.3 |
2002-2003 |
PSF |
yes |
2.3.2 |
2.3.1 |
2003 |
PSF |
yes |
2.3.3 |
2.3.2 |
2003 |
PSF |
yes |
2.3.4 |
2.3.3 |
2004 |
PSF |
yes |
Note: GPL-compatible doesn't mean that we're distributing Python under the GPL. All Python licenses, unlike the GPL, let you distribute a modified version without making your changes open source. The GPL-compatible licenses make it possible to combine Python with other software that is released under the GPL; the others don't.
Thanks to the many outside volunteers who have worked under Guido's direction to make these releases possible.
5. A Linguagem
4.1 Endentação 4.2 Identificadores 4.3 Tipos de dados 4.4 Operadores 4.5 Estrutura de dados 4.6 Controles de fluxos 4.7 Funções 4.8 Módulos 4.9 Exceções 4.10 Classes 4.11 Métodos
6. O Interpretador Python
Marcelo Pereira Nunes descreveu no artigo "Aspectos Formais da Linguagem Python - Análise Léxica e Modelo de Dados" http://www.portaldaprogramacao.com/artigos2.asp?n=230 que o interpretador Python interpreta senteças recebidas de algum dispositivo de entrada (console ou arquivo), Esta entrada é lida pelo analizador léxico que divide o código recebido em tokens, repassando-o para o parser que interpreta o programa. Python é totalmente definido utilizando a tabela ASCII de 7 bits.
7. Implementações
7.1 CPytohn 7.2 Jython 7.3 Piethon 7.4 Ironp
8. Comparações entre interfaces gráficas (GUI)
8.1 PyGTK 8.2 PyQT 8.3 wxPython 8.4 Tkinter 8.5 Python Card
9. Licença
The Python license imposes very few restrictions on what you can do with Python. Most of the source code is copyrighted by the Python Software Foundation (PSF). A few files have a different copyright owner, but the same license applies to all of them.
In layman's language, here are the primary features of Python's license. The following descriptions are not legal advice; read the full text of the license and consult qualified professional counsel for an interpretation of the license terms as they apply to you.
- Python é absolutamente livre, even for commercial use (including resale). You can sell a product written in Python or a product that embeds the Python interpreter. No licensing fees need to be paid for such usage.
- The Open Source Initiative has certified the Python license as Open Source, and includes it on their list of open source licenses.
- 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 is often compared to other interpreted languages such as Java, Javascript, Perl, Tcl, or Smalltalk. Comparisons to C++, Common Lisp and Scheme can also be enlightening. In this section I will briefly compare Python to each of these languages. These comparisons concentrate on language issues only. In practice, the choice of a programming language is often dictated by other real-world constraints such as cost, availability, training, and prior investment, or even emotional attachment. Since these aspects are highly variable, it seems a waste of time to consider them much for this comparison.
* 10.1 Java * 10.2 PHP * 10.3 Javascript * 10.4 Perl * 10.5 Tcl * 10.6 Smalltalk * 10.7 C++ * 10.8 Lisp
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:
1 print 'hello world'
10.1 Java
Python programs are generally 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:
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }
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.DateTimes, NumPy 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"> alert("Hello World"); </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 Tcl
Like Python, Tcl is usable as an application extension language, as well as a stand-alone programming language. However, Tcl, which traditionally stores all data as strings, is weak on data structures, and executes typical code much slower than Python. Tcl also lacks features needed for writing large programs, such as modular namespaces. Thus, while a "typical" large application using Tcl usually contains Tcl extensions written in C or C++ that are specific to that application, an equivalent Python application can often be written in "pure Python". Of course, pure Python development is much quicker than having to write and debug a C or C++ component. It has been said that Tcl's one redeeming quality is the Tk toolkit. Python has adopted an interface to Tk as its standard GUI component library.
Tcl 8.0 addresses the speed issuse by providing a bytecode compiler with limited data type support, and adds namespaces. However, it is still a much more cumbersome programming language.
Exemplo de código:
wm title . "Hello world!" frame .h -borderwidth 2 frame .q -borderwidth 2 button .h.hello -text "Hello world" \ -command "puts stdout \"Hello world!\"" -cursor gumby button .q.quit -text "Quit" -command exit -cursor pirate pack .h -side left pack .q -side right pack .h.hello pack .q.quit
10.6 Smalltalk
Perhaps the biggest difference between Python and Smalltalk is Python's more "mainstream" syntax, which gives it a leg up on programmer training. Like Smalltalk, Python has dynamic typing and binding, and everything in Python is an object. However, Python distinguishes built-in object types from user-defined classes, and currently doesn't allow inheritance from built-in types. Smalltalk's standard library of collection data types is more refined, while Python's library has more facilities for dealing with Internet and WWW realities such as email, HTML and FTP.
Python has a different philosophy regarding the development environment and distribution of code. Where Smalltalk traditionally has a monolithic "system image" which comprises both the environment and the user's program, Python stores both standard modules and user modules in individual files which can easily be rearranged or distributed outside the system. One consequence is that there is more than one option for attaching a Graphical User Interface (GUI) to a Python program, since the GUI is not built into the system.
Exemplo de código:
Transcript show:'Hello World';cr
10.7 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> int main() { cout << "Hello, World\n"; return -1; }
10.8 Lisp
These languages are close to Python in their dynamic semantics, but so different in their approach to syntax that a comparison becomes almost a religious argument: is Lisp's lack of syntax an advantage or a disadvantage? It should be noted that Python has introspective capabilities similar to those of Lisp, and Python programs can construct and execute program fragments on the fly. Usually, real-world properties are decisive: Common Lisp is big (in every sense), and the Scheme world is fragmented between many incompatible versions, where Python has a single, free, compact implementation.
Exemplos de código:
LISP
; LISP (DEFUN HELLO-WORLD () (PRINT (LIST 'HELLO 'WORLD)))
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 is using Python to implement a CAD/CAE/PDM repository and model management, integration, and transformation system which will be the core infrastructure for its next generation collaborative engineering environment. We chose Python because it provides maximum productivity, code that's clear and easy to maintain, strong and extensive (and growing!) libraries, and excellent capabilities for integration with other applications on any platform. All of these characteristics are essential for building efficient, flexible, scalable, and well-integrated systems, which is exactly what we need. Python has met or exceeded every requirement we've had," said Steve Waterbury, Software Group Leader, 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.
American Greetings (http://www.americangreetings.com) usa Python para servir milhões de cartões-saudação todos os dias.
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 embaixo dos aplicativos Zope e Plone, também desenvolvidos em Python.
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.
Wikipedia
Imagine um mundo no qual qualquer pessoa tenha a liberdade de acessar gratuitamente todo o acervo do conhecimento humano... É isso que a Wikimedia está fazendo!
A Wikipédia[x] é 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 GNU FDL[x].
A Wikipédia é gerenciada e operada pela Wikimedia Foundation[x], 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[x]. 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 o 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.
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. Rooft em 2003, escrito em linguagem Python e atualmente desenvolvido por mais de 10 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.
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.
Depois de extraído é necessário testar se o Python está funcionando corretamente, então digite python dentro do MS-DOS.
Se aparecer:
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. >>>
então está tudo certo, mas se aparecer a seguinte mensagem:
'python' não é reconhecido como um comando interno ou externo, um programa operável ou um arquivo em lotes.
Então é necessário criar um arquivo .bat da seguinte maneira:
* Abra um editor de texto e digite dentro dele: PATH %PATH%;LOCAL_ONDE_ESTA_O_PYTHON * Exemplo: PATH %PATH%;C:/ARQUIV~1/Python * Salve este arquivo como bot.bat * E coloque-o dentro da pasta de origem do pywikipediabot.
Agora teste o Python digitando python dentro do diretório do pywikipediabot e aparecerá >>>. Está tudo certo. Para sair digite Ctrl+Z.
Caso não aparecer o >>> então coloque todos os arquivos da pasta pywikipediabot para a pasta onde está o software Python.
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:
mylang = 'test' coloque em que língua da Wikipedia que você quer logar, por exemplo, 'pt'. username = 'login' coloque seu login.
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.
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
Para sair do Python digite Ctrl+D.
Módulos
- Interwiki.py:
O programa 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
- Table2wiki.py
Este programa 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
- Category.py
O programa 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.
- 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_disambig.py -just -always:0 -pos:artigo_1 atigo 1
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 em Python (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://pythonbrasil.com.br/moin.cgi/OsvaldoSantanaNeto <- python vs.java
http://primates.ximian.com/~sandino/python-glade/ <- python-glade
15.4 Links
http://twistedmatrix.com/wiki/python/FrontPage Python Wiki Wiki
http://activestate.com/Python.plex Active Python
http://aspn.activestate.com/ASPN/Python/Cookbook Python Cookbook
http://www.portaldaprogramacao.com/artigos2.asp?n=230 Análise Léxica do interpretador Python
Sobre este documento
O software que gera esta página é o MoinMoin (http://moinmoin.wikiwikiweb.de), um software livre desenvolvido em Python, lógico.