Linguagem Python
Upcoming SlideShare
Loading in...5
×
 

Linguagem Python

on

  • 392 views

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

Statistics

Views

Total Views
392
Views on SlideShare
392
Embed Views
0

Actions

Likes
1
Downloads
4
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Linguagem Python Linguagem Python Presentation Transcript

  • Linguagem PythonLinguagem PythonAlexandre MachadoAlexandre MachadoSENAI – Semana da IndústriaSENAI – Semana da IndústriaMaio / 2013Maio / 2013
  • 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
  • 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. View slide
  • 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 View slide
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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
  • 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
  • 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)
  • 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
  • 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.
  • 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.
  • ●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.
  • 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
  • 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.
  • 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
  • Python na práticaPython na prática● Algums exemplos em python, apenas para daruma idéia de que “cara” tem a linguagem
  • 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)
  • 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)
  • 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
  • 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 }
  • 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 }
  • 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]
  • 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.
  • 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]
  • Versão InterativaVersão Interativadef fatorial(x):result = 1for i in range(x,1,-1):result = result * ireturn result
  • ObrigadoObrigado● Alexandre Machado– axmachado@gmail.com