Linguagem Python
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Linguagem Python

  • 436 views
Uploaded on

Palestra apresentada em 25/05/2013 - Semana da Indústria ...

Palestra apresentada em 25/05/2013 - Semana da Indústria
Senai, São José, SC

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
436
On Slideshare
436
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
4
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Linguagem PythonLinguagem PythonAlexandre MachadoAlexandre MachadoSENAI – Semana da IndústriaSENAI – Semana da IndústriaMaio / 2013Maio / 2013
  • 2. O que é Python?O que é Python?● Linguagem de programação de uso geral● Linguagem de Alto Nível● Suporte a múltiplos paradigmas deprogramação● Projetada para favorecer a legibilidade docódigo
  • 3. Linguagem de Programação?Linguagem de Programação?● Linguagem (idioma) usado para dizer para ocomputador o que ele deve fazer● Idioma no qual o programador escreve osprogramas de computador● Tudo o que você usa no computador é umprograma, que foi escrito por umprogramador em alguma linguagem deprogramação.
  • 4. Foco em legibilidadeFoco em legibilidade● Legibilidade: facilidade para um programadorcompreender o código ao lê-lo.● Quando programadores precisam ler ocódigo?– Manutenção em geral● Novas funcionalidades● Correções● Adaptações em programas legados
  • 5. Programas legadosProgramas legados● Todo programa que não for descartado(jogado fora), um dia vai ser código legado!● Experiência pessoal: mais de 80% do tempoque trabalho com desenvolvimento desoftware, este trabalho tem algumenvolvimento com código legado.
  • 6. Conselho para programadoresConselho para programadores● Escreva o seu código de uma maneira que,quando você for ler este código daqui a 5anos, você ainda consiga entender.● Melhor ainda, escreva seu código imaginandoque a pessoa que vai ler daqui a 5 anos é umserial killer e tem seu endereço.
  • 7. Voltando ao PythonVoltando ao Python● Linguagem multi-paradigma– Paradigma: conceito ou modelo mental específico, umaforma de ver o mundo.– Paradigma de programação: modelo mental ou formade ver o mundo que define e orienta a maneira comoum programador vai estruturar a solução de umproblema.– Exemplos: funcional, orientado a objetos, estruturado,em lógica, orientado a aspectos, por contrato, etc.
  • 8. Paradigma EstruturadoParadigma Estruturado● Semelhante a C, Pascal, Basic, Modula, etc● Programa dividido em “funções” ou“procedimentos”● Completamente suporta pela linguagemPython: é possível escrever um programainteiramente estruturado nesta linguagem.
  • 9. ParadigmaParadigmaOrientado para ObjetosOrientado para Objetos● Semelhante a Java, C#, C++, Smalltalk● Programa é um conjunto de “Classes” e “Objetos”● Classes definem como os objetos são construídos ecomo se comportam.● Objetos “trocam mensagens com outros objetos”● Python suporta completamente o paradigmaorientado para objetos.
  • 10. Paradigma funcionalParadigma funcional● O paradigma– Programa é um conjunto de funções que operam sobreconjuntos e listas– Definições matemáticas rigorosas para funções, conjuntos elistas.– Uso intensivo de recursão● Suporte parcial em python– Map/reduce/filter/comprehensions/closures– Iteradores e ferramentas inspiradas em haskel– Hacks para tail-recursion
  • 11. ParadigmaParadigmaorientado a aspectosorientado a aspectos●O Paradigma– Aspectos diferentes do programa são tratados em momentos diferentes(segurança, autenticação, validação, tratamento de entradas, cálculos,formatação de saídas, etc)– Os aspectos são combinados um sobre o outro, com um aspectomodificando o comportamento do programa ao ser combinado comoutro.●Suporte parcial em python– Metaobjetos – objetos cujo comportamento é modificado em tempo deexecução.– Decorators – injeção de modificação no comportamento de métodos eobjetos
  • 12. ParadigmaParadigmaprogramação por contratoprogramação por contrato● O paradigma:– Cada objeto ou método opera através de umcontrato, composto de:● Pré-condições para ser executado● Pós-condições que são garantidas quando a execução éfinalizada● Suporte em python– Através de extensões (pycontract, zope.interface)
  • 13. ParadigmaParadigmaProgramação em LógicaProgramação em Lógica● O paradigma– O programa é composto de uma base de conhecimento(“fatos” e “regras”), e de questões que são respondidas porinferência na base de conhecimento– Implementação tradicional é chamada PROLOG– Usado em inteligência artificial (raciocínio baseado emcasos).● Suporte em python– Através de uma extensão: Pyke
  • 14. Características da LinguagemCaracterísticas da Linguagem● Interpretada (intepretador de bytecode, como Java ouqualquer linguagem da plataforma .NET)● Sistema de tipos dinâmico (como PHP, Ruby, Perl)– Fortemente tipada: todo objeto tem um tipo que nuncamuda.– Ligação dinâmica de nomes: um nome pode apontar paraum objeto em um momento e para outro em outromomento: variáveis não tem tipo.
  • 15. Filosofia – The Zen of PythonFilosofia – The Zen of PythonTim PettersTim Petters● Beautiful is better than ugly.– Bonito é melhor que feio● Explicit is better than implicit.– Explícito é melhor que implícito● Simple is better than complex.– Simples é melhor que complexo● Complex is better than complicated.– Complexo é melhor que compicado● Flat is better than nested.– Plano é melhor que aninhado●Sparse is better than dense.– Esparço é melhor que denso● Readability counts.– Legibilidade conta●Special cases arent special enoughto break the rules.– Casos especiais não são especiais osuficiente para quebrar as regras●Although practicality beats purity.– Porém, pragmatismo vence a pureza.
  • 16. ●Errors should never pass silently.– Erros não devem nunca passar silenciosamente.● Unless explicitly silenced.– A não ser que sejam explicitamente silenciados.● In the face of ambiguity, refuse thetemptation to guess.– Ao se defrontar com uma ambiguidade, resista atentação de adivinhar.●There should be one-- and preferably onlyone --obvious way to do it.– Deve haver uma – e preferencialmente apenasuma – maneira óbvia de fazer isto.● Although that way may not be obvious atfirst unless youre Dutch.– Porém, esta maneira pode não ser óbvia àprimeira vista, a não ser que você seja Holandês● Now is better than never.– Agora é melhor do que nunca● Although never is often better than *right* now.– Porém, nunca é melhor do que “neste momento”● If the implementation is hard to explain, its a badidea.– Se a implementação é difícil de explicar, é uma máidéia● If the implementation is easy to explain, it may bea good idea.– Se a implementação é fácil de explicar, pode ser umaboa idéia● Namespaces are one honking great idea -- lets domore of those!– Espaços de nomes são realmente uma grande idéia.Vamos fazer mais destas coisas.
  • 17. Quem usa python?Quem usa python?● Google– 3 linguagens oficiais:C++, Java e Python– Sistema de construçãode programas– Análise de logs● Yahoo– Maps– Groups● Industrial Light and Magic– Empresa de George Lucas– Guerra nas estrelas: ameaça fantasma –scripts de controle da renderização dasanimações foram feitos em Python● Batlefield Games– Batlefield 3: status do jogador ecomportamento de alguns elementosde cenário.● NASA– Sistema integrado de planejamento– Motor de scripts principal
  • 18. Quem usa python?Quem usa python?● CIA– Website principal feito em Zope/Plone (frameworkpython para WEB)● Computação científica– ScyPy – análise numérica– PyLab – ambiente interativo para ScyPy e traçadode gráficos– Pandas – ambiente para análise estatística.
  • 19. Aplicações interessantesAplicações interessantes● Ipython– Console interativo● Exaile– Player de música● Pitivi– Editor de vídeo não linear● Zope/Plone– CMS● Ferramentas deconfiguração da Red Hat● 15654 projetos noSourceForge● Django– Framework WEB– Mais de 4500 sites/sistemasregistrados
  • 20. Python na práticaPython na prática● Algums exemplos em python, apenas para daruma idéia de que “cara” tem a linguagem
  • 21. O básicoO básico● Objetos e nomes– O nome como umaetiqueta colada sobreum objeto, e nãouma caixa onde vocêcoloca um valor.print "Oi, mundo!!!"x = 1print x, type(x)x = 1.1print x, type(x)x = 1.1print x, type(x)x = u1.1print x, type(x)
  • 22. A coisa doA coisa do“espaço em branco”“espaço em branco”● Indentação écomponentesintático– Significa que, seindentar errado, oprograma nãocompila, ou não vaiter o comportamentoesperado.def maior(x,y):if x > y:return xelse:return ydef menor(x,y):return min(x,y)
  • 23. FatoriaisFatoriais● Mesmo problema resolvido em Java e Python– Versão 1● Recursivo– Versão 2 (só java):● Números grandes ( > 26! )– Versão 3 (interativa)● Evita estouro de pilha, limite de recursão
  • 24. Fat1.javaFat1.java1 /**2 * Programa de cálculo de fatorial3 */4 public class Fat1 {56 /**7 * Método que calcula o fatorial8 */9 public long fatorial(long x) {10 // resistir à tentação de fazer em uma só linha11 // para melhorar a legibilidade.12 //13 // return (x > 1) ? x * fatorial(x-1) : 1;14 if (x > 1) {15 return x * fatorial(x-1);16 }17 else {18 return 1;19 }20 }212223 /**24 * Método principal25 */26 public static void main(String[] args) {27 Fat1 calculador = new Fat1();28 if (args.length > 0) {29 long param = Long.valueOf(args[0]);30 long result = calculador.fatorial(param);31 System.out.println(String.format("Fatorial de %d é %d", param, result));32 }33 else {34 System.out.println ("Use java Fat1 <argumento>");35 }36 }
  • 25. Fat1.javaFat1.java(só método fatorial)(só método fatorial)6 /**7 * Método que calcula o fatorial8 */9 public long fatorial(long x) {10 // resistir à tentação de fazer em uma só linha11 // para melhorar a legibilidade.12 //13 // return (x > 1) ? x * fatorial(x-1) : 1;14 if (x > 1) {15 return x * fatorial(x-1);16 }17 else {18 return 1;19 }20 }
  • 26. fat1.pyfat1.py1 # -*- coding: utf-8 -*-2 import sys34 """5 Programa de cálculo de fatorial6 """7 class Fat1(object):8 """9 Classe de cálculo do fatorial, para10 usar o mesmo paradigma que o programa11 em java.12 """13 def fatorial(self, x):14 "Método (função) que calcula o fatorial"15 if x > 1:16 return x * self.fatorial(x-1)17 else:18 return 11920 # Equivalente ao método principal em java21 if __name__ == __main__:22 calculador = Fat1()23 if len(sys.argv) > 1:24 l = long(sys.argv[1])25 r = calculador.fatorial(l)26 print "Fatorial de %d é %d" % (l,r)27 else:28 print "Use python %s <argumento>", sys.argv[0]
  • 27. Fatorial estilo pythonFatorial estilo python● Não precisa definir a classe, afinal é só umafunção● Se for para usar com números pequenos, podeser recursivo (mais legível)● A versão mais robusta (interativo) podecalcular até o limite da memória RAM.
  • 28. Versão recursivaVersão recursivaimport sysdef fatorial(x):return x * fatorial(x-1) if x > 1 else 1if len(sys.argv) > 1:param = long(sys.argv[1])result = fatorial(param)print "Fatorial de %d é %d" % (param,result)else:print "Use python %s <arg>" % sys.argv[0]
  • 29. Versão InterativaVersão Interativadef fatorial(x):result = 1for i in range(x,1,-1):result = result * ireturn result
  • 30. ObrigadoObrigado● Alexandre Machado– axmachado@gmail.com