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

Python No Terra (2006-12-21)

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

Notas do Editor

  • #15 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 }.
  • #20 Mecanimos de modulos (namespace) e excessoes.