Por que Python?
10 raz˜oes para aprender Python
Marco Andr´e Lopes Mendes <marcoandre@gmail.com>
21 de outubro de 2010
Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
Uma breve introdu¸c˜ao
desse que vos fala
1 Mestre em Ciˆencia da Computa¸c˜ao pela UFSC
2 Professor desde 1995
1 Usu´ario Unix desde 1992 e Linux desde 1999
2 Entusiasta de software de c´odigo aberto
1 Membro da comunidade Python desde 2004
2 Membro-fundador da Associa¸c˜ao Python Brasil (APyB)
3 Membro da diretoria da APyB
Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
Uma breve introdu¸c˜ao
Sobre a linguagem
1 Criada por Guido van Rossum em 1991
2 Origem do nome: grupo de humoristas
Monty Python
3 Linguagem de alt´ıssimo n´ıvel (VHLL)
4 Sintaxe simples e f´acil de ser assimilada
5 Orientada `a objetos, estruturada e funcional
6 Tipagem forte e dinˆamica
7 Multiplataforma
8 Interpretada
9 Ambiente interativo
10 Licen¸ca compat´ıvel com a GPL
Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
1 - Python ´e legal
arquivo = open("emails.txt")
dominios = {}
for contato in arquivo:
resto , dominio = contato.split("@")
dominio = dominio.replace("rn", "")
if dominio in dominios:
dominios[dominio] += 1
else:
dominios[dominio] = 1
arquivo.close ()
arquivo = open("dominios.txt", "w")
for dominio in dominios.keys ():
registro = "%s;%sn" %( dominio , dominios[dominio ])
arquivo.write(registro)
arquivo.close ()
1 Simples
2 Leg´ıvel
3 Clara
4 Simplificada
5 Sofisticada
6 Poderosa
Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
2 - Python j´a vem com os acess´orios
Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
3 - Python ´e utilizado l´a fora
Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
3 - Python ´e utilizado l´a fora
Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
4 - Python ´e utilizado aqui dentro
LZT: AutoSystem
Async: Stoq
Instituto Nokia de Tecnologia
InVesalius
Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
5 - Python ´e utilizado na web ao redor do mundo
Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
5 - Python ´e utilizado na web ao redor do mundo
Diversos frameworks
Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
6 - Python ´e utilizado na web aqui no Brasil
globo.com
uiner.com
vericia.com
brasil.gov.br
Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
6 - Python ´e utilizado na web aqui no Brasil
ucs.br
serpro.gov.br
certsign.com.br
atepassar.com.br
Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
7 - Tem emprego para programadores Python
python.org/community/jobs
twitter.com/python_jobs
empregos.trovitbrasil.com.br/python
google.com.br/intl/en/jobs/
Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
8 - Python conversa com as outras linguagens
C e C++
void initspam(void );
static PyObject * spam_system (PyObject *self , PyObject *args );
static PyObject * spam_system (self , args)
PyObject *self;
PyObject *args; {
char *orden; int sts;
if (! PyArg_ParseTuple (args , "s", &orden ))
return NULL;
sts = system(orden );
return Py_BuildValue ("i", sts ); }
static PyMethodDef SpamMethods [] = {
{"system", spam_system , METH_VARARGS },
{NULL , NULL} };
void
initspam (){( void) Py_InitModule ("spam", SpamMethods );}
int main(int argc , char ** argv ){
Py_SetProgramName (argv [0]);
Py_Initialize ();
initspam ();
return 1; }
Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
8 - Python conversa com as outras linguagens
import javax.swing as libswing
pnumero = libswing.JOptionPane. showInputDialog ("Digite um Numero Inteiro: ")
snumero = libswing.JOptionPane. showInputDialog ("Digite um Numero Inteiro: ")
soma = int(pnumero) + int(snumero)
libswing. JOptionPane . showMessageDialog (None , "Soma: %d " % soma)
Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
8 - Python conversa com as outras linguagens
import clr
clr. AddReference ("System.Windows.Forms")
from System.Windows.Forms import *
class FormV3(Form ):
def __init__(self ):
self.Text = ’Hello World ’
self.Controls.Add(Label(Text=’Enter Message:’))
self.txtMessage = TextBox(Left =100)
self.Controls.Add(self.txtMessage)
msgButton = Button(Text=’Message ’, Left =20, Top =25)
msgButton.Click += self. OnMsgButtonClick
self.Controls.Add(msgButton)
def OnMsgButtonClick (self , *args ):
MessageBox.Show(self.txtMessage.Text ,"Message")
Application.Run(FormV3 ())
Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
8 - Python conversa com as outras linguagens
Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
9 - Python ´e multiplataforma
At´e aqui, nada de surpreendente, certo?
Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
9 - Python ´e multiplataforma
XO/OLPC
Grande parte do projeto ´e desenvolvida em Python, incluindo:
1 A interface gr´afica Sugar
2 V´arias aplica¸c˜oes e jogos
3 O sistema de arquivos
Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
9 - Python ´e multiplataforma
Dispositivos m´oveis
Maemo
Android
Iphone
Symbian
Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
10 - Python ´e multiparadigma
Programa¸c˜ao Estruturada
import random
def jogaDados ():
dado1 = random.randrange (1 ,7)
dado2 = random.randrange (1 ,7)
somaTemp = dado1 + dado2
print "Jogador tirou %d + %d = %d" %(dado1 ,dado2 ,somaTemp)
return somaTemp
soma = jogaDados ()
if soma == 7 or soma == 11:
situacaoJogo = "GANHOU"
elif soma == 2 or soma == 3 or soma == 12:
situacaoJogo = "PERDEU"
else:
situacaoJogo = "CONTINUA"
meuPonto = soma
print "Ponto: ", meuPonto
while situacaoJogo == "CONTINUA":
soma = jogaDados ()
if soma == meuPonto: situacaoJogo = "GANHOU"
elif soma == 7: situacaoJogo = "PERDEU"
if situacaoJogo == "GANHOU": print "Jogador ganha"
else: print "Jogador perde"
Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
10 - Python ´e multiparadigma
Programa¸c˜ao Orientada a Objetos
class Fracao(object ):
def __mdc(self , m, n):
if m % n == 0:
return n
else:
return self.__mdc(n, m%n)
def __init__(self , numerador , denominador =1):
g = self.__mdc(numerador , denominador )
self.numerador = numerador / g
self.denominador = denominador / g
def __repr__(self ):
return "%d/%d" %( self.numerador ,
self.denominador)
def __mul__(self ,outro ):
if isinstance(outro , int ):
outro = Fracao(outro)
return Fracao(self.numerador * outro.numerador ,
self.denominador * outro.denominador)
__rmul__ = __mul__
python -i poo -fracoes.py
>>> a = Fracao (5 ,7)
>>> b = Fracao (3 ,4)
>> r1 = a * b
>>> print r1
15/28
>>> c = Fracao (3 ,5)
>> r2 = a * c
>>> print r2
3/7
Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
10 - Python ´e multiparadigma
Programa¸c˜ao Funcional
# Primos menores que 1000
print filter(None ,map(lambda y:y*reduce(lambda x,y:x*y!=0,
map(lambda x,y=y:y%x,range (2,int(pow(y ,0.5)+1))) ,1) , range (2 ,1000)))
# Fibonacci : 10 primeiros numeros
print map(lambda x,f=lambda x,f:(x <=1) or (f(x-1,f)+f(x-2,f)): f(x,f),
range (10))
# Conjunto de Mandelbrot
print (lambda Ru ,Ro ,Iu ,Io ,IM ,Sx ,Sy:reduce(lambda x,y:x+y,map(lambda y,
Iu=Iu ,Io=Io ,Ru=Ru ,Ro=Ro ,Sy=Sy ,L=lambda yc ,Iu=Iu ,Io=Io ,Ru=Ru ,Ro=Ro ,i=IM ,
Sx=Sx ,Sy=Sy:reduce(lambda x,y:x+y,map(lambda x,xc=Ru ,yc=yc ,Ru=Ru ,Ro=Ro ,
i=i,Sx=Sx ,F=lambda xc ,yc ,x,y,k,f=lambda xc ,yc ,x,y,k,f:(k <=0) or (x*x+y*y
>=4.0) or 1+f(xc ,yc ,x*x-y*y+xc ,2.0*x*y+yc ,k-1,f):f(xc ,yc ,x,y,k,f): chr(
64+F(Ru+x*(Ro -Ru)/Sx ,yc ,0,0,i)), range(Sx ))):L(Iu+y*(Io -Iu)/Sy),range(Sy
))))( -2.1 , 0.7, -1.2, 1.2, 30, 80, 24)
Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
Bˆonus 1: 11 - Python ´e boa como primeira linguagem
aprenda a programar com Python
1 Experiˆencia de ensino desde 2004
2 V´arios iniciativas no Brasil e no mundo
3 MIT copiou nossa id´eia :)
4 Faz bem `a auto-estima do iniciante
5 Uso pode ser extrapolado para outras mat´erias
Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
Bˆonus 2: 12 - Existe uma comunidade forte
vocˆe tem com quem contar
1 Lista python-brasil: 3241 membros, 500 mensagens/mˆes.
2 Associa¸c˜ao Python Brasil: amadurecimento da comunidade
3 PythonBrasil[6]: na UFPR, em Curitiba/PR
4 FISL, Latinoware: trilhas de Python
5 Grupos de Usu´arios, PythOn Campus, #horaextra
Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
1 Estes slides: slideshare.com/marrcandre
2 google*: marcoandre@gmail.com
3 twitter: @marrcandre
4 blog: marrcandre.blogspot.com
random.choice([’pergunta’, ’d´uvida’, ’discuss˜ao’])
Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?

Porque Python - PythonBrasil[6]

  • 1.
    Por que Python? 10raz˜oes para aprender Python Marco Andr´e Lopes Mendes <marcoandre@gmail.com> 21 de outubro de 2010 Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
  • 2.
    Uma breve introdu¸c˜ao desseque vos fala 1 Mestre em Ciˆencia da Computa¸c˜ao pela UFSC 2 Professor desde 1995 1 Usu´ario Unix desde 1992 e Linux desde 1999 2 Entusiasta de software de c´odigo aberto 1 Membro da comunidade Python desde 2004 2 Membro-fundador da Associa¸c˜ao Python Brasil (APyB) 3 Membro da diretoria da APyB Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
  • 3.
    Uma breve introdu¸c˜ao Sobrea linguagem 1 Criada por Guido van Rossum em 1991 2 Origem do nome: grupo de humoristas Monty Python 3 Linguagem de alt´ıssimo n´ıvel (VHLL) 4 Sintaxe simples e f´acil de ser assimilada 5 Orientada `a objetos, estruturada e funcional 6 Tipagem forte e dinˆamica 7 Multiplataforma 8 Interpretada 9 Ambiente interativo 10 Licen¸ca compat´ıvel com a GPL Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
  • 4.
    1 - Python´e legal arquivo = open("emails.txt") dominios = {} for contato in arquivo: resto , dominio = contato.split("@") dominio = dominio.replace("rn", "") if dominio in dominios: dominios[dominio] += 1 else: dominios[dominio] = 1 arquivo.close () arquivo = open("dominios.txt", "w") for dominio in dominios.keys (): registro = "%s;%sn" %( dominio , dominios[dominio ]) arquivo.write(registro) arquivo.close () 1 Simples 2 Leg´ıvel 3 Clara 4 Simplificada 5 Sofisticada 6 Poderosa Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
  • 5.
    2 - Pythonj´a vem com os acess´orios Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
  • 6.
    3 - Python´e utilizado l´a fora Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
  • 7.
    3 - Python´e utilizado l´a fora Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
  • 8.
    4 - Python´e utilizado aqui dentro LZT: AutoSystem Async: Stoq Instituto Nokia de Tecnologia InVesalius Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
  • 9.
    5 - Python´e utilizado na web ao redor do mundo Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
  • 10.
    5 - Python´e utilizado na web ao redor do mundo Diversos frameworks Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
  • 11.
    6 - Python´e utilizado na web aqui no Brasil globo.com uiner.com vericia.com brasil.gov.br Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
  • 12.
    6 - Python´e utilizado na web aqui no Brasil ucs.br serpro.gov.br certsign.com.br atepassar.com.br Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
  • 13.
    7 - Tememprego para programadores Python python.org/community/jobs twitter.com/python_jobs empregos.trovitbrasil.com.br/python google.com.br/intl/en/jobs/ Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
  • 14.
    8 - Pythonconversa com as outras linguagens C e C++ void initspam(void ); static PyObject * spam_system (PyObject *self , PyObject *args ); static PyObject * spam_system (self , args) PyObject *self; PyObject *args; { char *orden; int sts; if (! PyArg_ParseTuple (args , "s", &orden )) return NULL; sts = system(orden ); return Py_BuildValue ("i", sts ); } static PyMethodDef SpamMethods [] = { {"system", spam_system , METH_VARARGS }, {NULL , NULL} }; void initspam (){( void) Py_InitModule ("spam", SpamMethods );} int main(int argc , char ** argv ){ Py_SetProgramName (argv [0]); Py_Initialize (); initspam (); return 1; } Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
  • 15.
    8 - Pythonconversa com as outras linguagens import javax.swing as libswing pnumero = libswing.JOptionPane. showInputDialog ("Digite um Numero Inteiro: ") snumero = libswing.JOptionPane. showInputDialog ("Digite um Numero Inteiro: ") soma = int(pnumero) + int(snumero) libswing. JOptionPane . showMessageDialog (None , "Soma: %d " % soma) Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
  • 16.
    8 - Pythonconversa com as outras linguagens import clr clr. AddReference ("System.Windows.Forms") from System.Windows.Forms import * class FormV3(Form ): def __init__(self ): self.Text = ’Hello World ’ self.Controls.Add(Label(Text=’Enter Message:’)) self.txtMessage = TextBox(Left =100) self.Controls.Add(self.txtMessage) msgButton = Button(Text=’Message ’, Left =20, Top =25) msgButton.Click += self. OnMsgButtonClick self.Controls.Add(msgButton) def OnMsgButtonClick (self , *args ): MessageBox.Show(self.txtMessage.Text ,"Message") Application.Run(FormV3 ()) Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
  • 17.
    8 - Pythonconversa com as outras linguagens Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
  • 18.
    9 - Python´e multiplataforma At´e aqui, nada de surpreendente, certo? Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
  • 19.
    9 - Python´e multiplataforma XO/OLPC Grande parte do projeto ´e desenvolvida em Python, incluindo: 1 A interface gr´afica Sugar 2 V´arias aplica¸c˜oes e jogos 3 O sistema de arquivos Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
  • 20.
    9 - Python´e multiplataforma Dispositivos m´oveis Maemo Android Iphone Symbian Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
  • 21.
    10 - Python´e multiparadigma Programa¸c˜ao Estruturada import random def jogaDados (): dado1 = random.randrange (1 ,7) dado2 = random.randrange (1 ,7) somaTemp = dado1 + dado2 print "Jogador tirou %d + %d = %d" %(dado1 ,dado2 ,somaTemp) return somaTemp soma = jogaDados () if soma == 7 or soma == 11: situacaoJogo = "GANHOU" elif soma == 2 or soma == 3 or soma == 12: situacaoJogo = "PERDEU" else: situacaoJogo = "CONTINUA" meuPonto = soma print "Ponto: ", meuPonto while situacaoJogo == "CONTINUA": soma = jogaDados () if soma == meuPonto: situacaoJogo = "GANHOU" elif soma == 7: situacaoJogo = "PERDEU" if situacaoJogo == "GANHOU": print "Jogador ganha" else: print "Jogador perde" Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
  • 22.
    10 - Python´e multiparadigma Programa¸c˜ao Orientada a Objetos class Fracao(object ): def __mdc(self , m, n): if m % n == 0: return n else: return self.__mdc(n, m%n) def __init__(self , numerador , denominador =1): g = self.__mdc(numerador , denominador ) self.numerador = numerador / g self.denominador = denominador / g def __repr__(self ): return "%d/%d" %( self.numerador , self.denominador) def __mul__(self ,outro ): if isinstance(outro , int ): outro = Fracao(outro) return Fracao(self.numerador * outro.numerador , self.denominador * outro.denominador) __rmul__ = __mul__ python -i poo -fracoes.py >>> a = Fracao (5 ,7) >>> b = Fracao (3 ,4) >> r1 = a * b >>> print r1 15/28 >>> c = Fracao (3 ,5) >> r2 = a * c >>> print r2 3/7 Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
  • 23.
    10 - Python´e multiparadigma Programa¸c˜ao Funcional # Primos menores que 1000 print filter(None ,map(lambda y:y*reduce(lambda x,y:x*y!=0, map(lambda x,y=y:y%x,range (2,int(pow(y ,0.5)+1))) ,1) , range (2 ,1000))) # Fibonacci : 10 primeiros numeros print map(lambda x,f=lambda x,f:(x <=1) or (f(x-1,f)+f(x-2,f)): f(x,f), range (10)) # Conjunto de Mandelbrot print (lambda Ru ,Ro ,Iu ,Io ,IM ,Sx ,Sy:reduce(lambda x,y:x+y,map(lambda y, Iu=Iu ,Io=Io ,Ru=Ru ,Ro=Ro ,Sy=Sy ,L=lambda yc ,Iu=Iu ,Io=Io ,Ru=Ru ,Ro=Ro ,i=IM , Sx=Sx ,Sy=Sy:reduce(lambda x,y:x+y,map(lambda x,xc=Ru ,yc=yc ,Ru=Ru ,Ro=Ro , i=i,Sx=Sx ,F=lambda xc ,yc ,x,y,k,f=lambda xc ,yc ,x,y,k,f:(k <=0) or (x*x+y*y >=4.0) or 1+f(xc ,yc ,x*x-y*y+xc ,2.0*x*y+yc ,k-1,f):f(xc ,yc ,x,y,k,f): chr( 64+F(Ru+x*(Ro -Ru)/Sx ,yc ,0,0,i)), range(Sx ))):L(Iu+y*(Io -Iu)/Sy),range(Sy ))))( -2.1 , 0.7, -1.2, 1.2, 30, 80, 24) Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
  • 24.
    Bˆonus 1: 11- Python ´e boa como primeira linguagem aprenda a programar com Python 1 Experiˆencia de ensino desde 2004 2 V´arios iniciativas no Brasil e no mundo 3 MIT copiou nossa id´eia :) 4 Faz bem `a auto-estima do iniciante 5 Uso pode ser extrapolado para outras mat´erias Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
  • 25.
    Bˆonus 2: 12- Existe uma comunidade forte vocˆe tem com quem contar 1 Lista python-brasil: 3241 membros, 500 mensagens/mˆes. 2 Associa¸c˜ao Python Brasil: amadurecimento da comunidade 3 PythonBrasil[6]: na UFPR, em Curitiba/PR 4 FISL, Latinoware: trilhas de Python 5 Grupos de Usu´arios, PythOn Campus, #horaextra Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?
  • 26.
    1 Estes slides:slideshare.com/marrcandre 2 google*: marcoandre@gmail.com 3 twitter: @marrcandre 4 blog: marrcandre.blogspot.com random.choice([’pergunta’, ’d´uvida’, ’discuss˜ao’]) Marco Andr´e Lopes Mendes <marcoandre@gmail.com> Por que Python?