SlideShare une entreprise Scribd logo
1  sur  30
Linguagem PythonLinguagem Python
Alexandre MachadoAlexandre Machado
SENAI – Semana da IndústriaSENAI – Semana da Indústria
Maio / 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 de
programação
● Projetada para favorecer a legibilidade do
código
Linguagem de Programação?Linguagem de Programação?
● Linguagem (idioma) usado para dizer para o
computador o que ele deve fazer
● Idioma no qual o programador escreve os
programas de computador
● Tudo o que você usa no computador é um
programa, que foi escrito por um
programador em alguma linguagem de
programação.
Foco em legibilidadeFoco em legibilidade
● Legibilidade: facilidade para um programador
compreender o código ao lê-lo.
● Quando programadores precisam ler o
código?
– Manutenção em geral
● Novas funcionalidades
● Correções
● Adaptações em programas legados
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 tempo
que trabalho com desenvolvimento de
software, este trabalho tem algum
envolvimento 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 5
anos, você ainda consiga entender.
● Melhor ainda, escreva seu código imaginando
que a pessoa que vai ler daqui a 5 anos é um
serial killer e tem seu endereço.
Voltando ao PythonVoltando ao Python
● Linguagem multi-paradigma
– Paradigma: conceito ou modelo mental específico, uma
forma de ver o mundo.
– Paradigma de programação: modelo mental ou forma
de ver o mundo que define e orienta a maneira como
um programador vai estruturar a solução de um
problema.
– 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 linguagem
Python: é possível escrever um programa
inteiramente estruturado nesta linguagem.
ParadigmaParadigma
Orientado 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 e
como se comportam.
● Objetos “trocam mensagens com outros objetos”
● Python suporta completamente o paradigma
orientado para objetos.
Paradigma funcionalParadigma funcional
● O paradigma
– Programa é um conjunto de funções que operam sobre
conjuntos e listas
– Definições matemáticas rigorosas para funções, conjuntos e
listas.
– Uso intensivo de recursão
● Suporte parcial em python
– Map/reduce/filter/comprehensions/closures
– Iteradores e ferramentas inspiradas em haskel
– Hacks para tail-recursion
ParadigmaParadigma
orientado 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 aspecto
modificando o comportamento do programa ao ser combinado com
outro.
●
Suporte parcial em python
– Metaobjetos – objetos cujo comportamento é modificado em tempo de
execução.
– Decorators – injeção de modificação no comportamento de métodos e
objetos
ParadigmaParadigma
programação por contratoprogramação por contrato
● O paradigma:
– Cada objeto ou método opera através de um
contrato, 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)
ParadigmaParadigma
Programaçã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 por
inferência na base de conhecimento
– Implementação tradicional é chamada PROLOG
– Usado em inteligência artificial (raciocínio baseado em
casos).
● Suporte em python
– Através de uma extensão: Pyke
Características da LinguagemCaracterísticas da Linguagem
● Interpretada (intepretador de bytecode, como Java ou
qualquer linguagem da plataforma .NET)
● Sistema de tipos dinâmico (como PHP, Ruby, Perl)
– Fortemente tipada: todo objeto tem um tipo que nunca
muda.
– Ligação dinâmica de nomes: um nome pode apontar para
um objeto em um momento e para outro em outro
momento: variáveis não tem tipo.
Filosofia – The Zen of PythonFilosofia – The Zen of Python
Tim 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 aren't special enough
to break the rules.
– Casos especiais não são especiais o
suficiente 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 the
temptation to guess.
– Ao se defrontar com uma ambiguidade, resista a
tentação de adivinhar.
●
There should be one-- and preferably only
one --obvious way to do it.
– Deve haver uma – e preferencialmente apenas
uma – maneira óbvia de fazer isto.
● Although that way may not be obvious at
first unless you're 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, it's a bad
idea.
– Se a implementação é difícil de explicar, é uma má
idéia
● If the implementation is easy to explain, it may be
a good idea.
– Se a implementação é fácil de explicar, pode ser uma
boa idéia
● Namespaces are one honking great idea -- let's do
more 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ção
de 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 das
animações foram feitos em Python
● Batlefield Games
– Batlefield 3: status do jogador e
comportamento de alguns elementos
de cenário.
● NASA
– Sistema integrado de planejamento
– Motor de scripts principal
Quem usa python?Quem usa python?
● CIA
– Website principal feito em Zope/Plone (framework
python para WEB)
● Computação científica
– ScyPy – análise numérica
– PyLab – ambiente interativo para ScyPy e traçado
de 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 de
configuração da Red Hat
● 15654 projetos no
SourceForge
● Django
– Framework WEB
– Mais de 4500 sites/sistemas
registrados
Python na práticaPython na prática
● Algums exemplos em python, apenas para dar
uma idéia de que “cara” tem a linguagem
O básicoO básico
● Objetos e nomes
– O nome como uma
etiqueta colada sobre
um objeto, e não
uma caixa onde você
coloca um valor.
print "Oi, mundo!!!"
x = 1
print x, type(x)
x = 1.1
print x, type(x)
x = '1.1'
print x, type(x)
x = u'1.1'
print x, type(x)
A coisa doA coisa do
“espaço em branco”“espaço em branco”
● Indentação é
componente
sintático
– Significa que, se
indentar errado, o
programa não
compila, ou não vai
ter o comportamento
esperado.
def maior(x,y):
if x > y:
return x
else:
return y
def 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.java
1 /**
2 * Programa de cálculo de fatorial
3 */
4 public class Fat1 {
5
6 /**
7 * Método que calcula o fatorial
8 */
9 public long fatorial(long x) {
10 // resistir à tentação de fazer em uma só linha
11 // 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 }
21
22
23 /**
24 * Método principal
25 */
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 fatorial
8 */
9 public long fatorial(long x) {
10 // resistir à tentação de fazer em uma só linha
11 // 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.py
1 # -*- coding: utf-8 -*-
2 import sys
3
4 """
5 Programa de cálculo de fatorial
6 """
7 class Fat1(object):
8 """
9 Classe de cálculo do fatorial, para
10 usar o mesmo paradigma que o programa
11 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 1
19
20 # Equivalente ao método principal em java
21 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ó uma
função
● Se for para usar com números pequenos, pode
ser recursivo (mais legível)
● A versão mais robusta (interativo) pode
calcular até o limite da memória RAM.
Versão recursivaVersão recursiva
import sys
def fatorial(x):
return x * fatorial(x-1) if x > 1 else 1
if 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 Interativa
def fatorial(x):
result = 1
for i in range(x,1,-1):
result = result * i
return result
ObrigadoObrigado
● Alexandre Machado
– axmachado@gmail.com

Contenu connexe

Tendances

Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e django
Igor Sobreira
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + Python
Mateus Padua
 
Python e Django na Globo.com
Python e Django na Globo.comPython e Django na Globo.com
Python e Django na Globo.com
ricobl
 
Erlang e Elixir por uma web mais feliz
Erlang e Elixir por uma web mais felizErlang e Elixir por uma web mais feliz
Erlang e Elixir por uma web mais feliz
Bruno Henrique - Garu
 

Tendances (20)

Senid2016 - Oficina de LibreLogo - Prof. Gilvan Vilarm
Senid2016 - Oficina de LibreLogo - Prof. Gilvan VilarmSenid2016 - Oficina de LibreLogo - Prof. Gilvan Vilarm
Senid2016 - Oficina de LibreLogo - Prof. Gilvan Vilarm
 
Python para Programadores
Python para ProgramadoresPython para Programadores
Python para Programadores
 
De Zero à Web com Python e Django
De Zero à Web com Python e DjangoDe Zero à Web com Python e Django
De Zero à Web com Python e Django
 
Senid2014 - Oficina de LibreLogo - Prof. Gilvan Vilarim
Senid2014 - Oficina de LibreLogo - Prof. Gilvan VilarimSenid2014 - Oficina de LibreLogo - Prof. Gilvan Vilarim
Senid2014 - Oficina de LibreLogo - Prof. Gilvan Vilarim
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e django
 
Python 3k
Python 3kPython 3k
Python 3k
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + Python
 
Desenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyDesenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2py
 
Python e Django na Globo.com
Python e Django na Globo.comPython e Django na Globo.com
Python e Django na Globo.com
 
Postgresql +python
Postgresql +pythonPostgresql +python
Postgresql +python
 
Desenvolvimento web e PHP
Desenvolvimento web e PHPDesenvolvimento web e PHP
Desenvolvimento web e PHP
 
PHP Simples e Produtivo
PHP Simples e ProdutivoPHP Simples e Produtivo
PHP Simples e Produtivo
 
TDD - Workshop Pyladies SP
TDD - Workshop Pyladies SPTDD - Workshop Pyladies SP
TDD - Workshop Pyladies SP
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
Programando em Elixir
Programando em ElixirProgramando em Elixir
Programando em Elixir
 
Introdução à linguagem python
Introdução à linguagem pythonIntrodução à linguagem python
Introdução à linguagem python
 
Ruby
RubyRuby
Ruby
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHP
 
Erlang e Elixir por uma web mais feliz
Erlang e Elixir por uma web mais felizErlang e Elixir por uma web mais feliz
Erlang e Elixir por uma web mais feliz
 
TDC2018SP | Trilha Python - Nao e magia, e tecnologia
TDC2018SP | Trilha Python - Nao e magia, e tecnologiaTDC2018SP | Trilha Python - Nao e magia, e tecnologia
TDC2018SP | Trilha Python - Nao e magia, e tecnologia
 

Similaire à Linguagem Python

Linguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo LuaLinguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo Lua
Sérgio Souza Costa
 
Comsolid2011 Introdução Python
Comsolid2011 Introdução PythonComsolid2011 Introdução Python
Comsolid2011 Introdução Python
Gleison Rodrigues
 
A linguagem de programação Erlang
A linguagem de programação ErlangA linguagem de programação Erlang
A linguagem de programação Erlang
elliando dias
 

Similaire à Linguagem Python (20)

Desenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonDesenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando Python
 
Calourada2010
Calourada2010Calourada2010
Calourada2010
 
Aula 01 python
Aula 01 pythonAula 01 python
Aula 01 python
 
Linguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo LuaLinguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo Lua
 
Automação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com PythonAutomação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com Python
 
Aula python
Aula pythonAula python
Aula python
 
01-Paradigmas.pdf
01-Paradigmas.pdf01-Paradigmas.pdf
01-Paradigmas.pdf
 
PARADIGMAS_LINGUAGENS_PROG_aula02.pdf
PARADIGMAS_LINGUAGENS_PROG_aula02.pdfPARADIGMAS_LINGUAGENS_PROG_aula02.pdf
PARADIGMAS_LINGUAGENS_PROG_aula02.pdf
 
Python-Fenalivre-Imed
Python-Fenalivre-ImedPython-Fenalivre-Imed
Python-Fenalivre-Imed
 
Python Training #1, ed. 6
Python Training #1, ed. 6Python Training #1, ed. 6
Python Training #1, ed. 6
 
Python Training #1 ed.6
Python Training #1 ed.6 Python Training #1 ed.6
Python Training #1 ed.6
 
Comsolid2011 Introdução Python
Comsolid2011 Introdução PythonComsolid2011 Introdução Python
Comsolid2011 Introdução Python
 
Apresentação final
Apresentação finalApresentação final
Apresentação final
 
Palestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas AplicaçõesPalestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas Aplicações
 
Python Training #1 - ed5
Python Training #1 - ed5Python Training #1 - ed5
Python Training #1 - ed5
 
A linguagem de programação Erlang
A linguagem de programação ErlangA linguagem de programação Erlang
A linguagem de programação Erlang
 
(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
 
Python
PythonPython
Python
 
Empreendendo com Python
Empreendendo com PythonEmpreendendo com Python
Empreendendo com Python
 

Linguagem Python

  • 1. Linguagem PythonLinguagem Python Alexandre MachadoAlexandre Machado SENAI – Semana da IndústriaSENAI – Semana da Indústria Maio / 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 de programação ● Projetada para favorecer a legibilidade do código
  • 3. Linguagem de Programação?Linguagem de Programação? ● Linguagem (idioma) usado para dizer para o computador o que ele deve fazer ● Idioma no qual o programador escreve os programas de computador ● Tudo o que você usa no computador é um programa, que foi escrito por um programador em alguma linguagem de programação.
  • 4. Foco em legibilidadeFoco em legibilidade ● Legibilidade: facilidade para um programador compreender o código ao lê-lo. ● Quando programadores precisam ler o có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 tempo que trabalho com desenvolvimento de software, este trabalho tem algum envolvimento 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 5 anos, você ainda consiga entender. ● Melhor ainda, escreva seu código imaginando que a pessoa que vai ler daqui a 5 anos é um serial killer e tem seu endereço.
  • 7. Voltando ao PythonVoltando ao Python ● Linguagem multi-paradigma – Paradigma: conceito ou modelo mental específico, uma forma de ver o mundo. – Paradigma de programação: modelo mental ou forma de ver o mundo que define e orienta a maneira como um programador vai estruturar a solução de um problema. – 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 linguagem Python: é possível escrever um programa inteiramente estruturado nesta linguagem.
  • 9. ParadigmaParadigma Orientado 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 e como se comportam. ● Objetos “trocam mensagens com outros objetos” ● Python suporta completamente o paradigma orientado para objetos.
  • 10. Paradigma funcionalParadigma funcional ● O paradigma – Programa é um conjunto de funções que operam sobre conjuntos e listas – Definições matemáticas rigorosas para funções, conjuntos e listas. – 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. ParadigmaParadigma orientado 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 aspecto modificando o comportamento do programa ao ser combinado com outro. ● Suporte parcial em python – Metaobjetos – objetos cujo comportamento é modificado em tempo de execução. – Decorators – injeção de modificação no comportamento de métodos e objetos
  • 12. ParadigmaParadigma programação por contratoprogramação por contrato ● O paradigma: – Cada objeto ou método opera através de um contrato, 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. ParadigmaParadigma Programaçã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 por inferência na base de conhecimento – Implementação tradicional é chamada PROLOG – Usado em inteligência artificial (raciocínio baseado em casos). ● Suporte em python – Através de uma extensão: Pyke
  • 14. Características da LinguagemCaracterísticas da Linguagem ● Interpretada (intepretador de bytecode, como Java ou qualquer linguagem da plataforma .NET) ● Sistema de tipos dinâmico (como PHP, Ruby, Perl) – Fortemente tipada: todo objeto tem um tipo que nunca muda. – Ligação dinâmica de nomes: um nome pode apontar para um objeto em um momento e para outro em outro momento: variáveis não tem tipo.
  • 15. Filosofia – The Zen of PythonFilosofia – The Zen of Python Tim 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 aren't special enough to break the rules. – Casos especiais não são especiais o suficiente 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 the temptation to guess. – Ao se defrontar com uma ambiguidade, resista a tentação de adivinhar. ● There should be one-- and preferably only one --obvious way to do it. – Deve haver uma – e preferencialmente apenas uma – maneira óbvia de fazer isto. ● Although that way may not be obvious at first unless you're 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, it's a bad idea. – Se a implementação é difícil de explicar, é uma má idéia ● If the implementation is easy to explain, it may be a good idea. – Se a implementação é fácil de explicar, pode ser uma boa idéia ● Namespaces are one honking great idea -- let's do more 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ção de 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 das animações foram feitos em Python ● Batlefield Games – Batlefield 3: status do jogador e comportamento de alguns elementos de 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 (framework python para WEB) ● Computação científica – ScyPy – análise numérica – PyLab – ambiente interativo para ScyPy e traçado de 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 de configuração da Red Hat ● 15654 projetos no SourceForge ● Django – Framework WEB – Mais de 4500 sites/sistemas registrados
  • 20. Python na práticaPython na prática ● Algums exemplos em python, apenas para dar uma idéia de que “cara” tem a linguagem
  • 21. O básicoO básico ● Objetos e nomes – O nome como uma etiqueta colada sobre um objeto, e não uma caixa onde você coloca um valor. print "Oi, mundo!!!" x = 1 print x, type(x) x = 1.1 print x, type(x) x = '1.1' print x, type(x) x = u'1.1' print x, type(x)
  • 22. A coisa doA coisa do “espaço em branco”“espaço em branco” ● Indentação é componente sintático – Significa que, se indentar errado, o programa não compila, ou não vai ter o comportamento esperado. def maior(x,y): if x > y: return x else: return y def 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.java 1 /** 2 * Programa de cálculo de fatorial 3 */ 4 public class Fat1 { 5 6 /** 7 * Método que calcula o fatorial 8 */ 9 public long fatorial(long x) { 10 // resistir à tentação de fazer em uma só linha 11 // 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 } 21 22 23 /** 24 * Método principal 25 */ 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 fatorial 8 */ 9 public long fatorial(long x) { 10 // resistir à tentação de fazer em uma só linha 11 // 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.py 1 # -*- coding: utf-8 -*- 2 import sys 3 4 """ 5 Programa de cálculo de fatorial 6 """ 7 class Fat1(object): 8 """ 9 Classe de cálculo do fatorial, para 10 usar o mesmo paradigma que o programa 11 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 1 19 20 # Equivalente ao método principal em java 21 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ó uma função ● Se for para usar com números pequenos, pode ser recursivo (mais legível) ● A versão mais robusta (interativo) pode calcular até o limite da memória RAM.
  • 28. Versão recursivaVersão recursiva import sys def fatorial(x): return x * fatorial(x-1) if x > 1 else 1 if 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 Interativa def fatorial(x): result = 1 for i in range(x,1,-1): result = result * i return result