Python No Terra (2006-12-21)

1,391 views

Published on

Palestra de apresentação da linguagem Python para as equipes de tecnologia do Terra.

Published in: Technology
1 Comment
1 Like
Statistics
Notes
No Downloads
Views
Total views
1,391
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
0
Comments
1
Likes
1
Embeds 0
No embeds

No notes for slide
  • Os tipos primitivos sao objetos (numeros, strings, descritores de arquivo). Objetos vivem no heap por isso devem ser criados (malloc) e destruidos (free). Variaveis sao como referencias ou ponteiros para os objetos. Pode lembrar COBOL, mas nao e’ fixo em colunas, apenas deve-se usar codigo alinhado em vem de uma clausula BEGIN e END ou { e }.
  • Mecanimos de modulos (namespace) e excessoes.
  • Python No Terra (2006-12-21)

    1. 1. <ul><ul><li>“ Por Que Eu Deveria Me Preocupar Em Aprender Python?” </li></ul></ul><ul><ul><li>ou </li></ul></ul><ul><ul><li>Um seminário de apresentação e propaganda da linguagem Python para as equipes de Tecnologia do Terra. </li></ul></ul><ul><ul><li>Rudá Moura </li></ul></ul><ul><ul><li>21 de Dezembro de 2006 </li></ul></ul>Terra.append(“Python”)
    2. 2. O Que É Python? <ul><li>Python é uma linguagem de (muito) alto nível, compilada em byte-code e interpretada em uma máquina virtual (PVM). </li></ul><ul><li>Suporta programação modular, estrutural, funcional e OO, com ênfase em OO. </li></ul><ul><li>Possui gerênciamento automático de memória, por contagem de referências e coleta de lixo (GC). </li></ul><ul><li>O pai da linguagem é o Holandês Guido van Rossum. O nome vem de Monthy Python. </li></ul>
    3. 3. O Que É Python? <ul><li>Python está mais para Ruby, Java e SmallTalk do que para Perl, PHP e C/C++. </li></ul><ul><li>Implementações da linguagem: </li></ul><ul><ul><li>CPython é o interpretador padrão feito em C. </li></ul></ul><ul><ul><li>Jython é o interpretador feito em Java. </li></ul></ul><ul><ul><li>IronPython é o Python para .NET. </li></ul></ul><ul><ul><li>PyPy é o Python em Python. </li></ul></ul><ul><ul><li>Todas compilam o mesmo fonte mas os byte-codes podem ser incompatíveis entre si. </li></ul></ul><ul><li>É fácil de aprender, é divertido e muito útil! </li></ul>
    4. 4. Os Prós da Linguagem <ul><li>Disponível para as plataformas Windows, Linux e Mac OS X. Multiplaforma sem ser um elefante como Java. </li></ul><ul><li>Biblitoteca padrão abrangente para uso imediato. </li></ul><ul><li>Convive muito bem com C, é fácil de fazer bindings. </li></ul>
    5. 5. Os Contras da Linguagem <ul><li>Não tem o desempenho de C, embora há meios de se otimizar o desempenho. </li></ul><ul><li>Não há muitos programadores de Python, embora o governo brasileiro esteja procurando profissionais! </li></ul><ul><li>Não há uma empresa como a Sun por trás, mas existe a Python Foundation, igual à fundação do Apache. </li></ul>
    6. 6. Python Não É Lento? <ul><li>Muito já se fez para tornar as linguagens interpretadas mais rápidas, o tempo de (Visual) BASIC já passou. </li></ul><ul><li>Python é compilado na forma de um byte-code, a tradução é rápida e a execução é boa o suficiente para muitos casos. </li></ul><ul><li>A sua tarefa necessita de tanto desempenho assim? </li></ul>
    7. 7. Como Otimizar? <ul><li>Entender a linguagem e utilizar estruturas de dados rápidas. </li></ul><ul><li>Re-escrever partes do programa (módulos) em C. </li></ul><ul><li>Usar mais as bibliotecas em C para Python. </li></ul><ul><li>Uma opção imediata de ganho de desempenho é através do Psyco (JIT). </li></ul>
    8. 8. Os Brasileiros Que Usam Python <ul><li>O CPqD monitora centrais telefônicas NGN com um sistema em grande parte implementado em Python. </li></ul><ul><li>O Serpro usa Python para a confecção rápida de portais Web. Principal ferramenta de sua Fábrica de Sítios. </li></ul><ul><li>Na Embratel, as interfaces do backbone e clientes internet são monitorados através de um sistema desenvolvido em Python. </li></ul><ul><li>Fonte: PythonBrasil.com.br </li></ul>
    9. 9. Os Estrangeiros Que Usam Python <ul><li>O Google usa Python para o sistema de ajuda do gmail e outros. O Guido é funcionário do Google! </li></ul><ul><li>O Yahoo! usa Python para o sistema de mapas , o sistema de arquivamento de grupos do Yahoo! também é em Python. </li></ul><ul><li>A NASA usa Python (além de Perl e C++) em diversos usos administrativos. </li></ul><ul><li>Fonte: Python.ORG </li></ul>
    10. 10. Quem Mais Utiliza? <ul><li>A Nokia usa Python como a linguagem de alto-nível para as plataformas S60 (Symbian) e Maemo (Linux). </li></ul><ul><li>O Terra já utiliza Python! O nosso LMTPd possui um interpretador embutido para extensões. </li></ul>
    11. 11. Aplicações da Linguagem <ul><li>Linguagem de scripting como “ferramenta de cola” ou de administração, dado à sua ampla biblioteca. </li></ul><ul><li>Linguagem embutida para extensão de programas. </li></ul><ul><li>Ferramenta de desenvolvimento de aplicações para Web. </li></ul><ul><li>Ferramenta de automação de testes. </li></ul><ul><li>Desenvolvimento em geral (com GUI), com prototipagem rápida. </li></ul>
    12. 12. “ Killer Applications” <ul><li>MoinMoin – um wiki popular. </li></ul><ul><li>Bittorrent – programa famoso e original de P2P. </li></ul><ul><li>Yum – gerenciador de pacotes de alto nível para RPM. </li></ul><ul><li>Ananconda – O instalador da RedHat. </li></ul><ul><li>Mailman – Gerenciador de listas. </li></ul><ul><li>Zope – Framework para Web. </li></ul><ul><li>Plone – um CMS. </li></ul><ul><li>Django – Framework para Web, é para ser o “Ruby on Rails” do Python. </li></ul>
    13. 13. O Caminho <ul><li>Vasculhar o PythonBrasil.com.br. </li></ul><ul><li>Ler o tutorial da linguagem escrito pelo Guido no Py.ORG. Tem a versão em português no PyBrasil. </li></ul><ul><li>Ler o livro Learning Python, 1ª Edição disponível on-line na O'Reilly. </li></ul><ul><li>Ler o livro Dive into Python. Disponível em formato PDF (gratuito) ou em papel. </li></ul>
    14. 14. Mantras <ul><li>“ Tudo em Python é objeto.” </li></ul><ul><li>“ Variáveis referenciam objetos; objetos têm tipos, mas variáveis não têm tipos.” </li></ul><ul><li>“ Blocos de código são alinhados por espaços e/ou tabulações.” </li></ul><ul><li>“ Não há conversão automática de tipos. Tudo tem que ser explícito.” </li></ul>
    15. 15. Tipos Básicos e Expressões <ul><ul><li># Comentário </li></ul></ul><ul><ul><li>None, True, False # None lembra o NULL do C </li></ul></ul><ul><ul><li>(123 + 456) / 789 * 2 # inteiros </li></ul></ul><ul><ul><li>123.456 # ponto flutuante </li></ul></ul><ul><ul><li>“ string” ou ’cadeia de caracteres’ </li></ul></ul><ul><ul><li>“ Trr” + “DSV” # “TrrDSV” </li></ul></ul><ul><ul><li>“ Terra” * 5 # “TerraTerraTerraTerraTerra” </li></ul></ul><ul><ul><li>(“vermelho”, “vermelho” , “azul”) # tupla </li></ul></ul><ul><ul><li>[1, 2, 3, “foo”, [1,2,3]] # listas </li></ul></ul><ul><ul><li>{“nome”: “fulano”, “idade”: 42} # dicionário </li></ul></ul>
    16. 16. Comandos e Métodos <ul><li>x = 123 </li></ul><ul><li>x = “foo” </li></ul><ul><li>x = [ ] </li></ul><ul><li>x = { } </li></ul><ul><li>a = b = c = 1 </li></ul><ul><li>if x > 0: </li></ul><ul><li>print “positivo” </li></ul><ul><li>elif : x == 0: </li></ul><ul><li>print “zero” </li></ul><ul><li>else : </li></ul><ul><li>print “negativo” </li></ul><ul><li>while counter > 0: </li></ul><ul><ul><li>x = x + counter </li></ul></ul><ul><ul><li>counter -= 1 </li></ul></ul><ul><li>lista = [4,3,2] </li></ul><ul><li>lista.append(1) # [4,3,2,1] </li></ul><ul><li>lista.sort() # [1,2,3,4] </li></ul><ul><li>str = “terra brasil” </li></ul><ul><li>print str.upper() </li></ul><ul><li>TERRA BRASIL </li></ul>
    17. 17. Interadores <ul><ul><li>objetos = [&quot;tesoura&quot;, &quot;pedra&quot;, &quot;papel&quot;] </li></ul></ul><ul><ul><li>for objeto in objetos: </li></ul></ul><ul><ul><li>print objeto </li></ul></ul><ul><ul><li>for x in range (1000): </li></ul></ul><ul><ul><li>faca_algo() </li></ul></ul><ul><ul><li>if x >= 5: continue </li></ul></ul><ul><ul><li>if x+y == 100: break </li></ul></ul>
    18. 18. Fatias (slices) <ul><ul><li>nums = [“um”, “dois”, “tres”, “quatro”] </li></ul></ul><ul><ul><li>nums[0] # um </li></ul></ul><ul><ul><li>nums[1:] # dois, tres, quatro </li></ul></ul><ul><ul><li>nums[:-1] # um, dois, tres </li></ul></ul><ul><ul><li>nums[1:-1] # dois, tres </li></ul></ul><ul><ul><li>nums[-2] # tres </li></ul></ul><ul><ul><li>nums[2][0] # t </li></ul></ul><ul><ul><li>linha = “isto e’ uma sentenca” </li></ul></ul><ul><ul><li>linha.split(“ “) # [“isto”, “e’”, “uma”, “sentenca”] </li></ul></ul>
    19. 19. Módulos e Excessões <ul><ul><li>import os, sys </li></ul></ul><ul><ul><li>print os.environ[&quot;HOME&quot;], os.environ[“SHELL”] </li></ul></ul><ul><ul><li>/home/ruda /bin/bash </li></ul></ul><ul><ul><li>print sys.argv[0], sys.argv[1] </li></ul></ul><ul><ul><li>programa.py argumento1 </li></ul></ul><ul><ul><li>print 1/0 </li></ul></ul><ul><ul><li>Traceback (most recent call last): </li></ul></ul><ul><ul><li>File &quot;<stdin>&quot;, line 1, in ? </li></ul></ul><ul><ul><li>ZeroDivisionError: integer division or modulo by zero </li></ul></ul><ul><ul><li>try : </li></ul></ul><ul><ul><li>print 1/0 </li></ul></ul><ul><ul><li>except ZeroDivisionError: </li></ul></ul><ul><ul><li>print “divisao por zero” </li></ul></ul>
    20. 20. Arquivos e Funções <ul><li>def max(x, y): </li></ul><ul><ul><li>“ calcula o maior valor” </li></ul></ul><ul><ul><li>if x > y: </li></ul></ul><ul><ul><li>return x </li></ul></ul><ul><ul><li>else : </li></ul></ul><ul><ul><li>return y </li></ul></ul><ul><li>print max(10,1) </li></ul><ul><li>10 </li></ul><ul><li>f = max </li></ul><ul><li>print f(10, 1) </li></ul><ul><li>10 </li></ul><ul><li>pw= open (&quot;/etc/passwd&quot;) </li></ul><ul><li>line=pw.readline() </li></ul><ul><li>print line </li></ul><ul><li>root:x:0:0:root:/root:/bin/bash </li></ul><ul><li>pw.close() </li></ul><ul><li>f= open (“arq_varios_MB”) </li></ul><ul><li>lines=f.xreadlines() </li></ul><ul><li>f.close() </li></ul><ul><li>print len(lines) </li></ul>
    21. 21. Classes e Objetos <ul><ul><li>class Pessoa(object): </li></ul></ul><ul><ul><li>def __init__(self, nome, endereco): </li></ul></ul><ul><ul><li>self.nome = nome </li></ul></ul><ul><ul><li>self.endereco = endereco </li></ul></ul><ul><ul><li>def getNome(self): </li></ul></ul><ul><ul><li>return self.nome </li></ul></ul><ul><ul><li>pessoa = Pessoa(“Fulano”, “XYZ”) </li></ul></ul><ul><ul><li>print pessoa.getNome() </li></ul></ul><ul><ul><li>Fulano </li></ul></ul>
    22. 22. Programa Passwd <ul><ul><li>#!/usr/bin/env python </li></ul></ul><ul><ul><li>import sys </li></ul></ul><ul><ul><li>def username_of(login): </li></ul></ul><ul><ul><li>passwd = open(&quot;/etc/passwd&quot;) </li></ul></ul><ul><ul><li>lines = passwd.readlines() </li></ul></ul><ul><ul><li>passwd.close() </li></ul></ul><ul><ul><li>for line in lines: </li></ul></ul><ul><ul><li>list = line.split(&quot;:”) # ['root', 'x', '0', '0', 'root', '/root', '/bin/bash '] </li></ul></ul><ul><ul><li>user, x, uid, gid, name, home, shell = list </li></ul></ul><ul><ul><li>if login == user: </li></ul></ul><ul><ul><li>return name </li></ul></ul><ul><ul><li>return None </li></ul></ul>
    23. 23. Programa Passwd (continuação) <ul><ul><li>if __name__ == &quot;__main__&quot;: </li></ul></ul><ul><ul><li>for arg in sys.argv[1:]: # [“root”, “ruda”, “abc”] </li></ul></ul><ul><ul><li>name = username_of(arg) </li></ul></ul><ul><ul><li>if name != None: </li></ul></ul><ul><ul><li>try : </li></ul></ul><ul><ul><li>name = name[:name.index(&quot;,&quot;)] </li></ul></ul><ul><ul><li>except ValueError: </li></ul></ul><ul><ul><li>pass </li></ul></ul><ul><ul><li>print 'O login &quot;%s&quot; pertence ao &quot;%s&quot;' % (arg, name) </li></ul></ul><ul><ul><li>else : </li></ul></ul><ul><ul><li>print 'O login &quot;%s&quot; nao existe!' % arg </li></ul></ul>
    24. 24. Programa IMAP <ul><ul><li>#!/usr/bin/env python </li></ul></ul><ul><ul><li>import imaplib </li></ul></ul><ul><ul><li>imap = imaplib.IMAP4(&quot;imap.terra.com.br&quot;) </li></ul></ul><ul><ul><li>imap.login(&quot;rruuddaa&quot;, &quot;hackme&quot;) # ('OK', ['LOGIN Ok.']) </li></ul></ul><ul><ul><li>status, data = imap.list() # ('OK', ['() &quot;.&quot; &quot;Inbox&quot;', '() &quot;.&quot; &quot;Sent&quot;', ..., &quot;Rascunhos&quot;']) </li></ul></ul><ul><ul><li>folders = [ ] </li></ul></ul><ul><ul><li>for x in data: </li></ul></ul><ul><ul><li>x = x[7:] # corta o '() &quot;.&quot; ' </li></ul></ul><ul><ul><li>x = x[1:-1] # tira as aspas </li></ul></ul><ul><ul><li>folders.append(x) </li></ul></ul>
    25. 25. Programa IMAP (continuação) <ul><ul><li>for folder in folders: </li></ul></ul><ul><ul><li>res, data = imap.select(folder) # ('OK', ['575']) </li></ul></ul><ul><ul><li>print &quot;Pasta&quot;, folder, </li></ul></ul><ul><ul><li>print &quot;contem %d mensagens&quot; % int(data[0]), </li></ul></ul><ul><ul><li>res, data = imap.search(None, &quot;UNSEEN&quot;) # ('OK', ['5 7 8 9 10...']) </li></ul></ul><ul><ul><li>print &quot;destas %d nao foram lidas&quot; % len(data[0].split(&quot; &quot;)) </li></ul></ul><ul><ul><li>imap.close() </li></ul></ul><ul><ul><li>imap.logout() </li></ul></ul>
    26. 26. Evolução <ul><li>Shell => Python => Python + Módulos em C </li></ul><ul><li>C, C + Interpretador Python embutido + módulos feitos em Python. </li></ul><ul><li>Python procedural => Python híbrido procedural + OO => Python OO puro. </li></ul><ul><li>C => C + testes automatizados em Python </li></ul>
    27. 27. Perguntas? <ul><ul><li>A pergunta mais óbvia é... Como se pronuncia Python? </li></ul></ul><ul><ul><li>Pái-tom, já que o th em inglês é difícil de pronunciar. </li></ul></ul><ul><ul><li>Outras? </li></ul></ul>
    28. 28. sys.exit(0) <ul><ul><li>for x in range(3): print “Obrigado!” </li></ul></ul><ul><ul><li>Contato: Rudá Moura [email_address] </li></ul></ul><ul><ul><li>Equipe TrrDSV do Terra Networks Brasil </li></ul></ul>

    ×