{ "metadata": { "name": "Capitulo1_Introducao" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "[Python para Desenvolvedores](http://ricardoduarte.github.io/python-para-desenvolvedores/#conteudo)\n", "==========================\n", "2ª edi\u00e7\u00e3o, revisada e ampliada\n", "-----------------------------------\n", "\n", "Cap\u00edtulo 1\n", "==========\n", "__________\n", "\n", "Introdu\u00e7\u00e3o\n", "----------\n", "[Python](http://www.python.org) \u00e9 uma linguagem de alt\u00edssimo n\u00edvel (em ingl\u00eas, *Very High Level Language*) orientada a objeto, de tipagem din\u00e2mica e forte, interpretada e interativa.\n", "\n", "Caracter\u00edsticas\n", "---------------\n", "O Python possui uma sintaxe clara e concisa, que favorece a legibilidade do c\u00f3digo fonte, tornando a linguagem mais produtiva.\n", "\n", "A linguagem inclui diversas estruturas de alto n\u00edvel (listas, dicion\u00e1rios, data / hora, complexos e outras) e uma vasta cole\u00e7\u00e3o de m\u00f3dulos prontos para uso, al\u00e9m de *frameworks* de terceiros que podem ser adicionados. Tamb\u00e9m possui recursos encontrados em outras linguagens modernas, tais como: geradores, introspec\u00e7\u00e3o, persist\u00eancia, metaclasses e unidades de teste. Multiparadigma, a linguagem suporta programa\u00e7\u00e3o modular e funcional, al\u00e9m da orienta\u00e7\u00e3o a objetos. Mesmo os tipos b\u00e1sicos no Python s\u00e3o objetos. A linguagem \u00e9 interpretada atrav\u00e9s de *bytecode* pela m\u00e1quina virtual Python, tornando o c\u00f3digo port\u00e1vel. Com isso \u00e9 poss\u00edvel compilar aplica\u00e7\u00f5es em uma plataforma e rodar em outros sistemas ou executar direto do c\u00f3digo fonte.\n", "\n", "Python \u00e9 um software de c\u00f3digo aberto (com licen\u00e7a compat\u00edvel com a *General Public License* (GPL), por\u00e9m menos restritiva, permitindo que o Python seja inclusive incorporado em produtos propriet\u00e1rios). A especifica\u00e7\u00e3o da linguagem \u00e9 mantida pela [ Python Software Foundation](http://www.python.org/psf/) (PSF).\n", "\n", "Al\u00e9m de ser utilizado como linguagem principal no desenvolvimento de sistemas, o Python tamb\u00e9m \u00e9 muito utilizado como linguagem *script* em v\u00e1rios softwares, permitindo automatizar tarefas e adicionar novas funcionalidades, entre eles: BrOffice.org, PostgreSQL, Blender, GIMP e Inkscape.\n", "\n", "\u00c9 poss\u00edvel integrar o Python a outras linguagens, como a Linguagem C e Fortran. Em termos gerais, a linguagem apresenta muitas similaridades com outras linguagens din\u00e2micas, como Perl e Ruby.\n", "\n", "Hist\u00f3rico\n", "---------\n", "A linguagem foi criada em 1990 por Guido van Rossum, no Instituto Nacional de Pesquisa para Matem\u00e1tica e Ci\u00eancia da Computa\u00e7\u00e3o da Holanda (CWI) e tinha originalmente foco em usu\u00e1rios como f\u00edsicos e engenheiros. O Python foi concebido a partir de outra linguagem existente na \u00e9poca, chamada ABC.\n", "\n", "Hoje, a linguagem \u00e9 bem aceita na ind\u00fastria por empresas de alta tecnologia, tais como:\n", "\n", "+ Google (aplica\u00e7\u00f5es Web).\n", "+ Yahoo (aplica\u00e7\u00f5es Web).\n", "+ Microsoft (IronPython: Python para .NET)\n", "+ Nokia (dispon\u00edvel para as linhas recentes de celulares e PDAs).\n", "+ Disney (anima\u00e7\u00f5es 3D).\n", "\n", "Vers\u00f5es\n", "-------\n", "A implementa\u00e7\u00e3o oficial do Python \u00e9 mantida pela PSF e escrita em C, e por isso, \u00e9 tamb\u00e9m conhecida como CPython. A vers\u00e3o est\u00e1vel mais recente est\u00e1 dispon\u00edvel para download no endere\u00e7o:\n", "\n", "[http://www.python.org/download/](http://www.python.org/download/)\n", "\n", "Para a plataforma Windows, basta executar o instalador. Para outras plataformas, como em sistemas Linux, geralmente o Python j\u00e1 faz parte do sistema, por\u00e9m em alguns casos pode ser necess\u00e1rio compilar e instalar o interpretador a partir dos arquivos fonte.\n", "\n", "Existem tamb\u00e9m implementa\u00e7\u00f5es de Python para .NET (IronPython), JVM (Jython) e em Python (PyPy).\n", "\n", "Executando programas\n", "--------------------\n", "\n", "Exemplo de programa em Python:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# O caractere \"#\" indica que o resto da linha \u00e9 um coment\u00e1rio\n", "\n", "# Uma lista de instrumentos musicais\n", "instrumentos = ['Baixo', 'Bateria', 'Guitarra']\n", "\n", "# Para cada nome na lista de instrumentos\n", "for instrumento in instrumentos:\n", " # mostre o nome do instrumento musical\n", " print instrumento" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Baixo\n", "Bateria\n", "Guitarra\n" ] } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "No exemplo, `instrumentos` \u00e9 uma lista contendo os itens \u201cBaixo\u201d, \u201cBateria\u201d e \u201cGuitarra\u201d. J\u00e1 `instrumento` \u00e9 um nome que corresponde a cada um dos itens da lista, conforme o la\u00e7o \u00e9 executado.\n", "\n", "Os arquivos fonte s\u00e3o identificados geralmente pela extens\u00e3o \u201c.py\u201d e podem ser executados diretamente pelo interpretador:\n", "\n", "`python apl.py`\n", "\n", "Assim o programa `apl.py` ser\u00e1 executado. No Windows, as extens\u00f5es de arquivo \u201c.py\u201d, \u201c.pyw\u201d, \u201c.pyc\u201d e \u201c.pyo\u201d s\u00e3o associadas ao Python automaticamente durante a instala\u00e7\u00e3o, ent\u00e3o \u00e9 s\u00f3 clicar no arquivo para executar. Os arquivos \u201c.pyw\u201d s\u00e3o executados com uma vers\u00e3o alternativa do interpretador que n\u00e3o abre a janela de console.\n", "\n", "Tipagem din\u00e2mica\n", "----------------\n", "Python utiliza tipagem din\u00e2mica, o que significa que o tipo de uma vari\u00e1vel \u00e9 inferido pelo interpretador em tempo de execu\u00e7\u00e3o (isto \u00e9 conhecido como *Duck Typing*). No momento em que uma vari\u00e1vel \u00e9 criada atrav\u00e9s de atribui\u00e7\u00e3o, o interpretador define um tipo para a vari\u00e1vel, com as opera\u00e7\u00f5es que podem ser aplicadas.\n", "\n", "A tipagem do Python \u00e9 forte, ou seja, o interpretador verifica se as opera\u00e7\u00f5es s\u00e3o v\u00e1lidas e n\u00e3o faz coer\u00e7\u00f5es autom\u00e1ticas entre tipos incompat\u00edveis. Para realizar a opera\u00e7\u00e3o entre tipos n\u00e3o compat\u00edveis, \u00e9 necess\u00e1rio converter explicitamente o tipo da vari\u00e1vel ou vari\u00e1veis antes da opera\u00e7\u00e3o.\n", "\n", "Compila\u00e7\u00e3o e interpreta\u00e7\u00e3o\n", "--------------------------\n", "O c\u00f3digo fonte \u00e9 traduzido pelo Python para *bytecode*, que \u00e9 um formato bin\u00e1rio com instru\u00e7\u00f5es para o interpretador. O *bytecode* \u00e9 multiplataforma e pode ser distribu\u00eddo e executado sem fonte original.\n", "\n", "![Compila\u00e7\u00e3o, interpreta\u00e7\u00e3o e empacotamento](files/bpypd_diags1.png)\n", "\n", "Por padr\u00e3o, o interpretador compila o c\u00f3digo e armazena o *bytecode* em disco, para que a pr\u00f3xima vez que o executar, n\u00e3o precise compilar novamente o programa, reduzindo o tempo de carga na execu\u00e7\u00e3o. Se os arquivos fontes forem alterados, o interpretador se encarregar\u00e1 de regerar o *bytecode* automaticamente, mesmo utilizando o *shell* interativo. Quando um programa ou um m\u00f3dulo \u00e9 evocado, o interpretador realiza a an\u00e1lise do c\u00f3digo, converte para s\u00edmbolos, compila (se n\u00e3o houver *bytecode* atualizado em disco) e executa na m\u00e1quina virtual Python.\n", "\n", "O *bytecode* \u00e9 armazenado em arquivos com extens\u00e3o \u201c.pyc\u201d (*bytecode* normal) ou \u201c.pyo\u201d (bytecode otimizado). O *bytecode* tamb\u00e9m pode ser empacotado junto com o interpretador em um execut\u00e1vel, para facilitar a distribui\u00e7\u00e3o da aplica\u00e7\u00e3o, eliminando a necessidade de instalar Python em cada computador.\n", "\n", "Modo interativo\n", "---------------\n", "O interpretador Python pode ser usado de forma interativa, na qual as linhas de c\u00f3digo s\u00e3o digitadas em um *prompt* (linha de comando) semelhante ao *shell* do sistema operacional.\n", "\n", "`python`\n", "\n", "Ele estar\u00e1 pronto para receber comandos ap\u00f3s o surgimento do sinal de espera `>>>` na tela:\n", "\n", "`Python 2.6.4 (r264:75706, Nov 3 2009, 13:20:47)`
\n", "`[GCC 4.4.1] on linux2`
\n", "`Type \"help\", \"copyright\", \"credits\" or \"license\" for more information.`
\n", "`>>>`\n", "\n", "No Windows, o modo interativo est\u00e1 dispon\u00edvel tamb\u00e9m atrav\u00e9s do \u00edcone \u201cPython (command line)\u201d.\n", "\n", "O modo interativo \u00e9 uma caracter\u00edstica diferencial da linguagem, pois \u00e9 poss\u00edvel testar e modificar trechos de c\u00f3digo antes da inclus\u00e3o do c\u00f3digo em programas, fazer extra\u00e7\u00e3o e convers\u00e3o de dados ou mesmo analisar o estado dos objetos que est\u00e3o em mem\u00f3ria, entre outras possibilidades.\n", "\n", "Al\u00e9m do modo interativo tradicional do Python, existem outros programas que funcionam como alternativas, com interfaces mais sofisticadas (como o PyCrust):\n", "\n", "![PyCrust](files/pycrust.png)\n", "\n", "Ferramentas\n", "-----------\n", "Existem muitas ferramentas de desenvolvimento para Python, como IDEs, editores e shells (que aproveitam da capacidade interativa do Python).\n", "\n", "*Integrated Development Environments* (IDEs) s\u00e3o pacotes de software que integram v\u00e1rias ferramentas de desenvolvimento em um ambiente consistente, com o objetivo de aumentar a produtividade do desenvolvedor. Geralmente, as IDEs incluem recursos como syntax highlight (c\u00f3digo fonte colorizado conforme a sintaxe da linguagem), navegadores de c\u00f3digo, shell integrado e *code completion* (o editor apresenta durante a digita\u00e7\u00e3o formas poss\u00edveis de completar o texto que ele consegue identificar).\n", "\n", "Entre as IDEs que suportam Python, encontram-se:\n", "\n", "+ [PyScripter](http://code.google.com/p/pyscripter/)\n", "+ [SPE](http://pythonide.blogspot.com/) (Stani's Python Editor)\n", "+ [Eric](http://eric-ide.python-projects.org/)\n", "+ [PyDev](http://pydev.org/) (plug-in para a IDE Eclipse)\n", "\n", "![PyScripter](files/pyscripter.png)\n", "\n", "Existem tamb\u00e9m editores de texto especializados em c\u00f3digo de programa\u00e7\u00e3o, que possuem funcionalidades como coloriza\u00e7\u00e3o de sintaxe, exporta\u00e7\u00e3o para outros formatos e convers\u00e3o de codifica\u00e7\u00e3o de texto.\n", "\n", "Esses editores suportam diversas linguagens de programa\u00e7\u00e3o, dentre elas o Python:\n", "\n", "+ [SciTE](http://www.scintilla.org/SciTE.html)\n", "+ [Notepad++](http://notepad-plus.sourceforge.net/br/site.htm)\n", "\n", "*Shell* \u00e9 o nome dado aos ambientes interativos para execu\u00e7\u00e3o de comandos, que podem ser usados para testar pequenas por\u00e7\u00f5es de c\u00f3digo e para atividades como *data crunching* (extra\u00e7\u00e3o de informa\u00e7\u00f5es de interesse de massas de dados e a subsequente tradu\u00e7\u00e3o para outros formatos).\n", "\n", "Al\u00e9m do pr\u00f3prio *Shell* padr\u00e3o do Python, existem os outros dispon\u00edveis:\n", "\n", "+ PyCrust (gr\u00e1fico)\n", "+ IPython (texto)\n", "\n", "Os empacotadores s\u00e3o utilit\u00e1rios que s\u00e3o usados para construir execut\u00e1veis que englobam o *bytecode*, o interpretador e outras depend\u00eancias, permitindo que o aplicativo rode em m\u00e1quinas sem Python instalado, o que facilita a distribui\u00e7\u00e3o de programas.\n", "\n", "Entre empacotadores feitos para Python, est\u00e3o dispon\u00edveis:\n", "\n", "+ py2exe (apenas para Windows)\n", "+ cx_Freeze (port\u00e1vel)\n", "\n", "*Frameworks* s\u00e3o cole\u00e7\u00f5es de componentes de software (bibliotecas, utilit\u00e1rios e outros) que foram projetados para serem utilizados por outros sistemas.\n", "\n", "Alguns *frameworks* dispon\u00edveis mais conhecidos:\n", "\n", "+ Web: Django, TurboGears, Zope e web2py.\n", "+ Interface gr\u00e1fica: wxPython, PyGTK e PyQt.\n", "+ Processamento cientifico: NumPy e SciPy.\n", "+ Processamento de imagens: PIL.\n", "+ 2D: Matplotlib e SVGFig.\n", "+ 3D: Visual Python, PyOpenGL e Python Ogre.\n", "+ Mapeamento objeto-relacional: SQLAlchemy e SQLObject.\n", "\n", "Cultura\n", "-------\n", "O nome Python foi tirado por Guido van Rossum do programa da TV brit\u00e2nica *Monty Python Flying Circus*, e existem v\u00e1rias refer\u00eancias na documenta\u00e7\u00e3o da linguagem ao programa, como, por exemplo, o reposit\u00f3rio oficial de pacotes do Python se chamava Cheese Shop, que era o nome de um dos quadros do programa. Atualmente, o nome do reposit\u00f3rio \u00e9 [Python Package Index](http://pypi.python.org/pypi) (PYPI).\n", "\n", "As metas do projeto foram resumidas por Tim Peters em um texto chamado *Zen of Python*, que est\u00e1 dispon\u00edvel no pr\u00f3prio Python atrav\u00e9s do comando:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import this" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "The Zen of Python, by Tim Peters\n", "\n", "Beautiful is better than ugly.\n", "Explicit is better than implicit.\n", "Simple is better than complex.\n", "Complex is better than complicated.\n", "Flat is better than nested.\n", "Sparse is better than dense.\n", "Readability counts.\n", "Special cases aren't special enough to break the rules.\n", "Although practicality beats purity.\n", "Errors should never pass silently.\n", "Unless explicitly silenced.\n", "In the face of ambiguity, refuse the temptation to guess.\n", "There should be one-- and preferably only one --obvious way to do it.\n", "Although that way may not be obvious at first unless you're Dutch.\n", "Now is better than never.\n", "Although never is often better than *right* now.\n", "If the implementation is hard to explain, it's a bad idea.\n", "If the implementation is easy to explain, it may be a good idea.\n", "Namespaces are one honking great idea -- let's do more of those!\n" ] } ], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "O texto enfatiza a postura pragm\u00e1tica do *Benevolent Dictator for Life* (BDFL), como Guido \u00e9 conhecido na comunidade Python.\n", "\n", "Propostas para melhoria da linguagem s\u00e3o chamadas de PEPs (*Python Enhancement Proposals*), que tamb\u00e9m servem de refer\u00eancia para novos recursos a serem implementados na linguagem.\n", "\n", "Al\u00e9m do site oficial, outras boas fontes de informa\u00e7\u00e3o sobre a linguagem s\u00e3o:[ PythonBrasil](http://python.org.br), o site da comunidade Python no Brasil, com bastante informa\u00e7\u00e3o em portugu\u00eas, e [Python Cookbook](http://aspn.activestate.com/ASPN/Python/Cookbook/), site que armazena \u201creceitas\u201d: pequenas por\u00e7\u00f5es de c\u00f3digo para realizar tarefas espec\u00edficas." ] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", "" ], "output_type": "pyout", "prompt_number": 1, "text": [ "" ] } ], "prompt_number": 1 } ], "metadata": {} } ] }