linguagem python

Download Linguagem Python

If you can't read please download the document

Upload: alexandre-machado

Post on 06-Jun-2015

295 views

Category:

Documents


15 download

DESCRIPTION

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

TRANSCRIPT

  • 1. Linguagem PythonLinguagem PythonAlexandre MachadoAlexandre MachadoSENAI Semana da IndstriaSENAI Semana da IndstriaMaio / 2013Maio / 2013

2. O que Python?O que Python? Linguagem de programao de uso geral Linguagem de Alto Nvel Suporte a mltiplos paradigmas deprogramao Projetada para favorecer a legibilidade docdigo 3. Linguagem de Programao?Linguagem de Programao? 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 deprogramao. 4. Foco em legibilidadeFoco em legibilidade Legibilidade: facilidade para um programadorcompreender o cdigo ao l-lo. Quando programadores precisam ler ocdigo? Manuteno em geral Novas funcionalidades Correes Adaptaes em programas legados 5. Programas legadosProgramas legados Todo programa que no for descartado(jogado fora), um dia vai ser cdigo legado! Experincia pessoal: mais de 80% do tempoque trabalho com desenvolvimento desoftware, este trabalho tem algumenvolvimento com cdigo legado. 6. Conselho para programadoresConselho para programadores Escreva o seu cdigo de uma maneira que,quando voc for ler este cdigo daqui a 5anos, voc ainda consiga entender. Melhor ainda, escreva seu cdigo imaginandoque a pessoa que vai ler daqui a 5 anos umserial killer e tem seu endereo. 7. Voltando ao PythonVoltando ao Python Linguagem multi-paradigma Paradigma: conceito ou modelo mental especfico, umaforma de ver o mundo. Paradigma de programao: modelo mental ou formade ver o mundo que define e orienta a maneira comoum programador vai estruturar a soluo de umproblema. Exemplos: funcional, orientado a objetos, estruturado,em lgica, orientado a aspectos, por contrato, etc. 8. Paradigma EstruturadoParadigma Estruturado Semelhante a C, Pascal, Basic, Modula, etc Programa dividido em funes ouprocedimentos Completamente suporta pela linguagemPython: possvel 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 so construdos 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 funes que operam sobreconjuntos e listas Definies matemticas rigorosas para funes, conjuntos elistas. Uso intensivo de recurso Suporte parcial em python Map/reduce/filter/comprehensions/closures Iteradores e ferramentas inspiradas em haskel Hacks para tail-recursion 11. ParadigmaParadigmaorientado a aspectosorientado a aspectosO Paradigma Aspectos diferentes do programa so tratados em momentos diferentes(segurana, autenticao, validao, tratamento de entradas, clculos,formatao de sadas, etc) Os aspectos so 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 deexecuo. Decorators injeo de modificao no comportamento de mtodos eobjetos 12. ParadigmaParadigmaprogramao por contratoprogramao por contrato O paradigma: Cada objeto ou mtodo opera atravs de umcontrato, composto de: Pr-condies para ser executado Ps-condies que so garantidas quando a execuo finalizada Suporte em python Atravs de extenses (pycontract, zope.interface) 13. ParadigmaParadigmaProgramao em LgicaProgramao em Lgica O paradigma O programa composto de uma base de conhecimento(fatos e regras), e de questes que so respondidas porinferncia na base de conhecimento Implementao tradicional chamada PROLOG Usado em inteligncia artificial (raciocnio baseado emcasos). Suporte em python Atravs de uma extenso: Pyke 14. Caractersticas da LinguagemCaractersticas da Linguagem Interpretada (intepretador de bytecode, como Java ouqualquer linguagem da plataforma .NET) Sistema de tipos dinmico (como PHP, Ruby, Perl) Fortemente tipada: todo objeto tem um tipo que nuncamuda. Ligao dinmica de nomes: um nome pode apontar paraum objeto em um momento e para outro em outromomento: variveis no 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. Explcito melhor que implcito 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 aninhadoSparse is better than dense. Esparo melhor que denso Readability counts. Legibilidade contaSpecial cases arent special enoughto break the rules. Casos especiais no so especiais osuficiente para quebrar as regrasAlthough practicality beats purity. Porm, pragmatismo vence a pureza. 16. Errors should never pass silently. Erros no devem nunca passar silenciosamente. Unless explicitly silenced. A no ser que sejam explicitamente silenciados. In the face of ambiguity, refuse thetemptation to guess. Ao se defrontar com uma ambiguidade, resista atentao 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. Porm, esta maneira pode no ser bvia primeira vista, a no ser que voc seja Holands Now is better than never. Agora melhor do que nunca Although never is often better than *right* now. Porm, nunca melhor do que neste momento If the implementation is hard to explain, its a badidea. Se a implementao difcil de explicar, uma midia If the implementation is easy to explain, it may bea good idea. Se a implementao fcil de explicar, pode ser umaboa idia Namespaces are one honking great idea -- lets domore of those! Espaos de nomes so realmente uma grande idia.Vamos fazer mais destas coisas. 17. Quem usa python?Quem usa python? Google 3 linguagens oficiais:C++, Java e Python Sistema de construode programas Anlise de logs Yahoo Maps Groups Industrial Light and Magic Empresa de George Lucas Guerra nas estrelas: ameaa fantasma scripts de controle da renderizao dasanimaes foram feitos em Python Batlefield Games Batlefield 3: status do jogador ecomportamento de alguns elementosde cenrio. 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) Computao cientfica ScyPy anlise numrica PyLab ambiente interativo para ScyPy e traadode grficos Pandas ambiente para anlise estatstica. 19. Aplicaes interessantesAplicaes interessantes Ipython Console interativo Exaile Player de msica Pitivi Editor de vdeo no linear Zope/Plone CMS Ferramentas deconfigurao da Red Hat 15654 projetos noSourceForge Django Framework WEB Mais de 4500 sites/sistemasregistrados 20. Python na prticaPython na prtica Algums exemplos em python, apenas para daruma idia de que cara tem a linguagem 21. O bsicoO bsico Objetos e nomes O nome como umaetiqueta colada sobreum objeto, e nouma caixa onde voccoloca 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 doespao em brancoespao em branco Indentao componentesinttico Significa que, seindentar errado, oprograma nocompila, ou no 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 Verso 1 Recursivo Verso 2 (s java): Nmeros grandes ( > 26! ) Verso 3 (interativa) Evita estouro de pilha, limite de recurso 24. Fat1.javaFat1.java1 /**2 * Programa de clculo de fatorial3 */4 public class Fat1 {56 /**7 * Mtodo que calcula o fatorial8 */9 public long fatorial(long x) {10 // resistir tentao 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 * Mtodo 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 ");35 }36 } 25. Fat1.javaFat1.java(s mtodo fatorial)(s mtodo fatorial)6 /**7 * Mtodo que calcula o fatorial8 */9 public long fatorial(long x) {10 // resistir tentao 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 clculo de fatorial6 """7 class Fat1(object):8 """9 Classe de clculo do fatorial, para10 usar o mesmo paradigma que o programa11 em java.12 """13 def fatorial(self, x):14 "Mtodo (funo) que calcula o fatorial"15 if x > 1:16 return x * self.fatorial(x-1)17 else:18 return 11920 # Equivalente ao mtodo 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 ", sys.argv[0] 27. Fatorial estilo pythonFatorial estilo python No precisa definir a classe, afinal s umafuno Se for para usar com nmeros pequenos, podeser recursivo (mais legvel) A verso mais robusta (interativo) podecalcular at o limite da memria RAM. 28. Verso recursivaVerso 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 " % sys.argv[0] 29. Verso InterativaVerso Interativadef fatorial(x):result = 1for i in range(x,1,-1):result = result * ireturn result 30. ObrigadoObrigado Alexandre Machado [email protected]