Este documento apresenta um mini-curso introdutório sobre Python. Resume que o instrutor é Marcel Caraciolo e que o curso irá explicar o que é Python, por que ele é fácil e poderoso de usar, e como começar a programar em Python.
Mini-Curso de Python dia 21/03 (Segunda-Feira) no II Workshop de SL do CIN/UFPE
1. Hello, I am Python!
Marcel Caraciolo
Mini-Curso De Introdução a Python
II Workshop de Software Livre - CIN/UFPE - Recife - PE
1
1
2. Quem é o instrutor ?
• Marcel Pinheiro Caraciolo - @marcelcaraciolo
• Sergipano, porém Recifense.
• Diretor de Pesquisa e Desenvolvimento da Orygens
• Mestrando em Ciência da Computação no CIN/UFPE na área de mineração de dados
• Membro e Moderador da Celúla de Usuários Python de Pernambuco (PUG-PE)
• Minhas áreas de interesse: Computação móvel e Computação inteligente
• Meus blogs: http://www.mobideia.com (sobre Mobilidade desde 2006)
http://aimotion.blogspot.com (sobre I.A. desde 2009)
Jovem Aprendiz ainda nas artes pythonicas.... (desde 2007)
II Workshop de Software Livre - CIN/UFPE - Recife - PE
2
2
3. !"#$
O que é Python ?
Por que Python?
II Workshop de Software Livre - CIN/UFPE - Recife - PE
3
3
4. !"#$
Por que Python
É fácil
II Workshop de Software Livre - CIN/UFPE - Recife - PE
4
4
5. !"#$
Por que é fácil
• Semelhança com pseudo-código.
II Workshop de Software Livre - CIN/UFPE - Recife - PE
5
5
6. Hello World Classíco
... ‘hello world’ - Python vs { Java, C, PHP e Pascal }
II Workshop de Software Livre - CIN/UFPE - Recife - PE
6
7. Hello World Classíco
.... Em Python ....
print “Hello World”
II Workshop de Software Livre - CIN/UFPE - Recife - PE
7
8. Por que Python
É fácil
É poderoso
II Workshop de Software Livre - CIN/UFPE - Recife - PE
8
8
9. Canivete suíço
Tipagem dinâmica
Biblioteca padrão completa
Multi-paradigma
Multi-plataforma
Facilmente extensível
Free Software (GPL)
II Workshop de Software Livre - CIN/UFPE - Recife - PE
9
10. Por que é poderoso
• Python para Web
• Web é presente -> Futuro!
• Django (http://www.django.org)
• Zope (http://www.zope.org)
• Plone (http://www.plone.org)
• Turbogears (http://www.turbogears.org)
• Web2Py (http://www.web2py.com)
II Workshop de Software Livre - CIN/UFPE - Recife - PE
10
10
12. Web
http://globo.com
II Workshop de Software Livre - CIN/UFPE - Recife - PE
12
12
13. Por que é poderoso
• Python para gestão empresarial
• PyGTK (http://www.pygtk.org)
• PyQT (http://qt.nokia.com)
• MySQL, PostgreSQL, Oracle, Sqlite
II Workshop de Software Livre - CIN/UFPE - Recife - PE
13
13
15. Aplicativos Desktop
Python + Qt + Qml
II Workshop de Software Livre - CIN/UFPE - Recife - PE
15
16. Python é multi-plataforma
• Python em dispositivos móveis
• Python for Symbian (PyS60), PySide (Maemo), ASE (Android)
II Workshop de Software Livre - CIN/UFPE - Recife - PE
16
18. Por que é poderoso
NetworkX
http://pypi.python.org/pypi
II Workshop de Software Livre - CIN/UFPE - Recife - PE
18
19. Python é multi-plataforma
• PyMT
• Python Multi Touch
• Especialmente criado para
ambientes multi-touch
http://pymt.eu/
II Workshop de Software Livre - CIN/UFPE - Recife - PE
19
20. PyGame e Jogos
http://www.pygame.org/news.html
II Workshop de Software Livre - CIN/UFPE - Recife - PE
20
21. Aplicativos Desktop
http://www.blender.org/
II Workshop de Software Livre - CIN/UFPE - Recife - PE
21
22. Quem usa Python?
II Workshop de Software Livre - CIN/UFPE - Recife - PE
22
22
23. ... e aqui no Brasil também!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
23
24. Python entre as 10 + !
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
II Workshop de Software Livre - CIN/UFPE - Recife - PE
24
25. O que é python ?
É fácil
É poderoso
II Workshop de Software Livre - CIN/UFPE - Recife - PE
25
26. O que é python ?
É fácil
É poderoso
É divertido
II Workshop de Software Livre - CIN/UFPE - Recife - PE
25
28. Hun, sei o que é Python!
...E agora como eu começo ?
II Workshop de Software Livre - CIN/UFPE - Recife - PE
27
29. Instaladores
• Interpretador Python disponível para diversas
plataformas.
• Windows, Unix, Linux, etc.
• Para usuários Windows, é necessário o download do SDK!
• http://www.python.org/download/
II Workshop de Software Livre - CIN/UFPE - Recife - PE
28
28
30. Instaladores
• Atualmente Python está na versão 2.7.1 / 3.2
• No Python 3.0 houve mudanças críticas! 2.7.x suaviliza a transição para
os desenvolvedores (Muitos frameworks ainda escritos para Python 2.x)
II Workshop de Software Livre - CIN/UFPE - Recife - PE
29
29
32. Instaladores (Windows)
• Não esqueça de adicionar o caminho da instalação
no PATH do sistema!
• ;C:Python2x
Windows 7
• >>> 2 + 3 Approved!
• >>> 5
II Workshop de Software Livre - CIN/UFPE - Recife - PE
31
31
33. Instaladores
• E enquanto no Linux e Unix ?
• Estas distribuições já disponibilizam para você de forma nativa!
• Prompt do python “>>>”:
• Para sair:
• No Unix, digite CONTROL-D
• No Windows, digite CONTROL-Z + ENTER
II Workshop de Software Livre - CIN/UFPE - Recife - PE
32
32
34. Vamos executar!
...E agora como eu crio meu
programa em python ?
II Workshop de Software Livre - CIN/UFPE - Recife - PE
33
33
35. Rodando Programas no Unix
• Os arquivos python tem finalização .py!
%python filename.py
• Você pode usar qualquer editor de texto para codificar o seu código!
• No Windows : Clássico Notepad ou o IDLE...
• No Mac OS/Linux: VI, TextEdit, GEdit, TextMate ...
Para tornar o arquivo *.py executável:
#!/usr/bin/python
Para aceitar textos com acentos e caracteres
especiais:
# -*- coding: utf-8 -*-
II Workshop de Software Livre - CIN/UFPE - Recife - PE
34
34
36. Ambiente IDLE
• Ambiente Shell de
desenvolvimento básico
• Editor de texto com
highlighting e identação
automática para criação
de arquivos python
• Comandos para alterar
propriedades e execução
de programas
II Workshop de Software Livre - CIN/UFPE - Recife - PE
35
35
37. Desenvolvimento
... E ambientes de
desenvolvimento para Python ?
II Workshop de Software Livre - CIN/UFPE - Recife - PE
36
36
38. Eclipse
• Aptana PyDev
• Plugin para
desenvolvimento de
aplicações Python para o
Eclipse
• Suporte para Debug,
UnitTests.
• http://pydev.org/
II Workshop de Software Livre - CIN/UFPE - Recife - PE
37
37
39. Netbeans
• Netbeans >= 6.5
• Plugin para
desenvolvimento de
aplicações Python para o
Netbeans
• Suporte para Debug,
UnitTests, etc.
• http://wiki.netbeans.org/PythonInstall
II Workshop de Software Livre - CIN/UFPE - Recife - PE
38
38
40. ActivePython
• ActiveState Python
• Distribuição Python
completa, instale e execute!
• Diversos plug-ins e suporte
já ao Python 3.0
• http://www.activestate.com/activepython/
II Workshop de Software Livre - CIN/UFPE - Recife - PE
39
39
41. EasyClipse
• Distribuição
customizada do
Eclipse!
• Distribuição pronta para
uso, inclusive com o
ambiente para Python!
• Pydev já vem instalado !
• http://www.easyeclipse.org/
II Workshop de Software Livre - CIN/UFPE - Recife - PE
40
40
42. PyCharm
• IDE em Python
customizada com
suporte incluso ao
Django
• Excelente IDE para
desenvolvimento WEB
• 30 dias gratuito
• http://www.jetbrains.com/pycharm/
II Workshop de Software Livre - CIN/UFPE - Recife - PE
41
41
43. Outros Editores
Notepad++, GEdit, VIM, Emacs, IDLE, Eric IDE,
TextMate, etc.
Vários editores ao seu dispor compatíveis com Python!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
42
42
44. Seu shell incrementado...
• IPython (Disponível para Linux, Mac, Windows)
• http://ipython.scipy.org/
• BPython (Disponível para Linux e Mac OS)
• http://bpython-interpreter.org/
• Incrementam o shell do seu interpretador
Python com auto-complete, highlighting, etc.
II Workshop de Software Livre - CIN/UFPE - Recife - PE
43
43
45. Chega de conversa...
• É hora de por a mão na
massa!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
44
44
46. Por onde começo ?
... Criando nosso primeiro Hello World !
II Workshop de Software Livre - CIN/UFPE - Recife - PE
45
45
47. ... em Python ...
print “Hello World”
Exemplos1.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
46
46
48. Tipos e operações
Vamos ver um trecho de código em
Python!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
47
47
49. Código Base
II Workshop de Software Livre - CIN/UFPE - Recife - PE
48
48
50. ... entendendo o código...
• Atribuição utiliza = e comparação utiliza ==
II Workshop de Software Livre - CIN/UFPE - Recife - PE
49
49
51. ... entendendo o código...
• Atribuição utiliza = e comparação utiliza ==
II Workshop de Software Livre - CIN/UFPE - Recife - PE
50
50
52. ... entendendo o código...
• Números: + - * / % tem suas funções características
• + pode ser usado como concatenação de Strings;
• % pode ser usado para formatar Strings (assim como em C).
II Workshop de Software Livre - CIN/UFPE - Recife - PE
51
51
53. ... entendendo o código...
• Números: + - * / % tem suas funções características
• + pode ser usado como concatenação de Strings;
• % pode ser usado para formatar Strings (assim como em C).
II Workshop de Software Livre - CIN/UFPE - Recife - PE
52
52
54. ... entendendo o código...
• Operadores lógicos são palavras e não símbolos (||,
&&)
• and, or, not
II Workshop de Software Livre - CIN/UFPE - Recife - PE
53
53
55. ... entendendo o código...
• Operadores lógicos são palavras e não símbolos (||,
&&)
• and, or, not
II Workshop de Software Livre - CIN/UFPE - Recife - PE
54
54
56. ... entendendo o código...
• print é o comando básico para “impressão” na tela
II Workshop de Software Livre - CIN/UFPE - Recife - PE
55
55
57. ... entendendo o código...
• print é o comando básico para “impressão” na tela
II Workshop de Software Livre - CIN/UFPE - Recife - PE
56
56
58. ... entendendo o código...
• E se você quiser receber uma entrada diretamente
do usuário ?
• raw_input() - retorna uma string !
Exemplos1.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
57
57
59. ... entendendo o código...
• A primeira atribuição em uma variável também é
responsável por cria-lá.
• Os tipos das variáveis não precisam ser informados;
• Python descobre o tipo da variável por conta própria!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
58
58
60. ... entendendo o código...
• A primeira atribuição em uma variável também é
responsável por cria-lá.
• Os tipos das variáveis não precisam ser informados;
• Python descobre o tipo da variável por conta própria!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
59
59
61. !
!"#$%&'&'"()**+,-
... Usando o Shell
! .#/#'&01)/'2$3&/4#56)"'7&4&'481&%&"')'#1/2091&"'%)'
94'&0:)1&'0#"1#');)791#/'&'7&4#$%&'<%2/=>'?0">@'A9%&'
)4'.B1(&$'8'&0:)1&C
! DDD%2/+<"1/2$E'%)'1)"1)=-
! F19%&'"&0/)'"1/2$E"CD
! DDD
! .#/#'G2"9#*2H#/'#'%&794)$1#5I&'%)'94'?0:)1&'0#"1#'
);)791#/'&'7&4#$%&'<()*J=
! DDD()*J+KLLL-
! FM&794)$1#5I&'%&'&0:)1&'N$1)2/&D
! DDD
II Workshop de Software Livre - CIN/UFPE - Recife - PE
60
60
62. !
!"#$%&'&'"()**+,-
... Usando o Shell
! .#/#'/)0)12/'&'3&4#$%&'#$1)/2&/'0&%)5")
! !"#/'#'")1#'0#/#'324#
! 62721#/'89:
! .#/#'$#;)7#/')$1/)'&"'3&4#$%&'<=')>)3?1#%&"'@#"1#'
?"#/'#"'")1#"'0#/#'324#')'0#/#'@#2>&
! .#/#'&@1)/'#<?%#'7)/#*')>)3?1#5")'&'3&4#$%&'A()*0+-B
! .#/#'"#2/'%&'()*0'AC?21B
! .#/#'&@1)/'#'*2"1#'%&"'4D%?*&"'
A4&%?*)"B
! .#/#'2$1)//&40)/'#*7?4'3&4#$%&'A31/*'E'FB
II Workshop de Software Livre - CIN/UFPE - Recife - PE
61
61
63. Whitespace
• Importante para identação e novas linhas
• Use para quando for para uma próxima linha prematuramente.
• Em Python não há { } !! Isso é para definição de
dicionários (dict)
• Blocos de código definidos por identação!
Exemplos1.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
62
62
64. Comentários
• Comentários começam com #
• Convenção: Você pode definir uma “documentação” em string como
primeira linha de qualquer nova função que você definir.
• Muito importante para o desenvolvedor, crítico para o usuário!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
63
63
65. !
!"#"$%&#'(%)$"*+&*%),-
Conhecendo a linguagem...
! .)/"0)$"0&/%&*%),"+"
! 12&0,3-
! 444"*5*67
! 444"*5*8%&(%&9
! 444
! :-#%&0&/%&*%),"+";*/<-*&2)(%&*$"(%=
! >&*?@)(&#*0@+"#*-*%),-;*@(&*@0"*
A@/B<-
! 12&0,3-
! 444"*5*C)/%D*6=7*E*1FFGHHH
! 444"*5*)/%C6=7D
II Workshop de Software Livre - CIN/UFPE - Recife - PE
64
64
66. !
!"#$%&%'(")
Conhecendo a linguagem...
! *+,-.,))/0-1"#$%&%'+,-1"-20.,)
! 3%4%
! 052-%-6-78
! 9:2;,5
! %-6-7
! *+,-.,))/0-#,<%51,)-1"#$%&%204,)-=>?@40,)AB
! 3%4%
! C$D,-5-6-5"E-C$D,=B8
! 9:2;,5
! 5-6-C$D,=B
II Workshop de Software Livre - CIN/UFPE - Recife - PE
65
65
67. Tipos Básicos
• Inteiros (padrão para números)
• Divisão entre inteiros, resposta um inteiro!
• Inteiros Longos
• L ou l no final. (Convertido automaticamente com precisão de inteiros >
32 bits)
• Floats (ponto flutuante)
• 1.23, 3.4e-10
• Complexas
• >> 2 + 3j
Exemplos1.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
66
66
68. Tipos Básicos
• Representação numérica
• Representação de dígitos com/sem formatação de string
• Divisão clássica / base
• Uso dos operadores // e /
• Operações em nível de bit
• 1 << 2 , 1| 2 , 1&2
• Notações hexadecimal / octal
• 2 , 0x10 , 0100 , oct(64), hex(255) , int(‘200’), int(‘0100’,8) , int(‘0x40’,16)
• Operações válidas: +, *, >> , ** , pow, abs, round, etc. Exemplos1.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
67
67
70. Comandos básicos
!
!"#$%&'()$*"+),-$.*/0&/%($.
• Alguns comandos básicos que podem ajudar no ínicio!
• dir(element) - todos
! 1$"'()$*"#$%&' os atributos e métodos que estão associados a
elemento.
! 20/3,&'*&,)$*4,/*/.&56/%*/"*#%5"/5%$*
• 7-$3$*($*"+),-$
type(element) - Descobrir o tipo do objeto!
• import - importe módulos para uso no seu código!
! 8$%('*65.96/-*$7:/&$.*/*./,.*%/.#/3&56$.*
";&$)$.
!"#$%& !"#$%&#
!"#$%& !"#$%&#'(&)#
!"#$%& !"#$%&#'(&)#!'(!"(&)
) !"#$%&#!!"#$%& !*
) !"#$%&#!!"#$%& !(&)#
) !"#$%&#!!"#$%& !(&)#'+,-"!'(!(+,
II Workshop de Software Livre - CIN/UFPE - Recife - PE
69
69
71. Exercício 01
• Faça um programa que peça 2 números e um real.
• Calcule e mostre:
• O produto do dobro do primeiro com a metade do segundo
• A soma do triplo do primeiro com o terceiro
• O terceiro elevado ao cubo
II Workshop de Software Livre - CIN/UFPE - Recife - PE
70
70
72. Atribuição
... Vamos entender como funciona
atribuição!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
71
71
73. Atribuição
• Atribuição de uma variável em Python significa criar um rótulo
para armazenar uma referência para algum objeto.
• Atribuição cria referências e não cópias!
• Inferência do tipo da referência baseado no tipo de dado atribuído
• A referência é deletada por meio de Garbage Collection
• Quando o objeto deixa de ser referenciado por nenhum outro
rótulo(variável).
II Workshop de Software Livre - CIN/UFPE - Recife - PE
72
72
74. Atribuição
• Lembre-se que Python a tipagem é dinâmica!
• Declarar variáveis sem atribuí-las irá levantar um erro!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
73
73
75. Atribuição
• Você pode inicializar várias variáveis de uma só vez!
• x = y = z = 2.0
• Rótulos de variáveis são Case Sensitive e não podem iniciar
com número. Números, letras e underscores são permitidos!
• bob bob_2 _bob _2_bob bob_2 BoB
• Não esquecer das palavras reservadas!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
74
74
76. Atribuição
• Entendendo manipulação de atribuição de referências
• x = y não significa que você fez uma cópia de y!
• x = y o que realmente faz é x referencia ao objeto que y referencia!
• O que realmente acontece por trás dessa simples atribuição:
II Workshop de Software Livre - CIN/UFPE - Recife - PE
75
75
77. Atribuição
• Mas e se fizermos isso ?! Qual será o valor de x ?
>>> x = “casa”
>>> y = x
>>> x = “fazenda”
>>> print x
II Workshop de Software Livre - CIN/UFPE - Recife - PE
76
76
78. Atribuição
• Mas e se fizermos isso ?! Qual será o valor de x ?
>>> x = “casa”
>>> y = x
>>> y = “fazenda”
>>> print x
• Do mesmo jeito que nós esperávamos! Dados nativos são
imutáveis! (String, Inteiros, float, complexos).
>>> x = “casa” #cria 3, x referencia ao objeto string “casa”
>>> y = x # Cria variavel y, referencia ao objeto string “casa”
>>> y = “fazenda” #Cria referencia ao objeto string “fazenda”
>>> print x # Nenhum efeito em x, ainda referencia “casa”
>>> casa
II Workshop de Software Livre - CIN/UFPE - Recife - PE
77
77
79. Listas, Strings e Tuplas
... O poder de python agora!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
78
78
80. Listas, Strings e Tuplas
• Todos os três são Sequências!
• Podem ser indexados por algum valor ordinal posicional
• Todas as operações apresentadas aqui nesta seção podem ser aplicadas em
todos os tipos de sequência
• Listas
• li = [1,2,3, ‘abc’]
• Tuplas
• li = (23, ‘abc’, 4.56, (2,3), ‘def’)
• Strings
• st = “Hello World” st = ‘Hello World’
Exemplos2.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
79
79
81. Listas, Strings e Tuplas
• Manipulando sequências!
• Pelo índice a partir de 0 Ex: ti [0]
• Índices podem ser positivos ou negativos! Ex: ti[1] (esq.) ti[-4] (dir.)
• Fracionamento e matrizes!
• li[1:3] L[1:] matrix = [[1,3,4] , [3,5,6] , [7,8,9]]
• Operador in
• retorna um booleano. Checa se um valor está em uma sequência!
• 4 in li
Exemplos2.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
80
80
82. !
Listas, Strings e Tuplas
!"#$%#&'&%()##%*+,&"$)*#
! -*+"()&.,#"$"/,#&)&*)0%$"/,#
!!!"#$#%&'(')'*'+,#!"#$%&'()*%)+$,-%
!!!"%-,
&
!!!"%(,
)
!!!"%.&,
+
!!!"%.),
)
!!!"%&/,
%(')'*'+,
!!!"%/),
%&'('),
!!!"%&/*/(,#!%"#.,"$*()()/%,,(0)"(+.-%1,.)/2+%3*()*.)4).5)4
%('*,
!!!"%//.&,
%+'*')'('&,#!/%,,()3.6%-$7()$37.#-.)%),.8293"$%
Exemplos2
II Workshop de Software Livre - CIN/UFPE - Recife - PE
81
81
83. Operacões em Listas
• Operador + , *
• a = “Hello” + “ World” (concatenação)
• [3] * 4 (repetição)
• Operador len() e append()
• len() - retorna um inteiro com o tamanho da sequência!
• append() - adiciona um elemento ao final da lista!
• Atribuição
• list[0] = ‘3’
• Fazendo cópias de sequência , Cuidado!!!
Exemplos2.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
82
82
84. Operacões em Listas
• Qual será o valor de b ?
>>> a = [1,2,3]
>>> b = a
>>> a.append(4)
>>> print b
II Workshop de Software Livre - CIN/UFPE - Recife - PE
83
83
85. Operacões em Listas
• Qual será o valor de b ?
>>> a = [1,2,3]
>>> b = a
>>> a.append(4)
>>> print b
• Surpresa!
>>> b = [1,2,3,4]
• Dados do tipo listas, dicionarios e pré-definidos pelo usuário
são mutáveis!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
84
84
86. Operacões em Listas
II Workshop de Software Livre - CIN/UFPE - Recife - PE
85
85
87. Operacões em Listas
• Para fazer cópias de listas
• a = b[:] (2 cópias independentes)
• a = b (os 2 referenciam o mesmo objeto)
• Qual a diferença entre listas e tuplas ?
• Listas são mutáveis e Tuplas imutáveis!
• l = [1,‘abc’,4] t = (1,‘abc’,4,5)
• Atribuição em listas e tuplas
• list[0] = ‘3‘ ok!
• t[0] = 3 NOK!!! (Deve-se criar uma nova tupla! - t = (3, ‘abc’,4,5)
Exemplos2.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
86
86
88. Tuplas x Listas
!
• Listas
!"#$%& são mais lentas porém mais poderosas que tuplas
• Listas podem ser modificadas e tem diversos operadores que podem ser
utilizados
! '(%)*+%,-.)-/*0"%*&/%/$*&)%&1/+2,/",%/3*4-(-.5%/&")*$1/
• Tuplas são imutáveis e tem menos funcionalidades!
&62/*,")78-*&
! /9&%:&-/%/4".562/)"#$-;</#%(%/)(%.&42(,%(/2")(2&/)*#2&/
•
-,/)"#$%& converter entre listas e tuplas ?
Para
!!!"#$#%&'(')'*'+,
!!!-./012"3
2&'(')'*'+3
!!!045-2-./012"33
%&'(')'*'+,
!!!610/2-./013#!"#$%&%'#"())
Exemplos2.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
87
87
90. Métodos muito usados
• append(), insert(), extend(), del()
• min(), max()
• index(), count(), remove(), pop()
• reverse() , sort()
• etc.
Exemplos2.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
89
89
91. Strings
• Formatação e conversão de Strings
• Usam os mesmos operadores básicos de lista
• Multi-Strings, Strings com aspas simples e duplas
• Caracteres Speciais e str() e unicode()
Exemplos2.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
90
90
92. Strings
• Também uma sequência e é Imutável!
• “42” + 1 (erro!) Use “42” + str(1)
• float(), int() -> string para numéro
• Atribuição
• S = ‘spam’ S[0] = ‘x’ ERRO!!!
• Strings são imutáveis!
• String -> Lista -> String (.join)
• Formatação de string
Exemplos2.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
91
91
93. Métodos mais usados
• find(), replace(), join(), split()
• isdigit(), islower(), strip(),
• startswith(), upper(), lower()
• etc.
Exemplos2.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
92
92
94. Exercício 03
• Crie uma lista com o nome de 10 pessoas e sorteie uma
pessoa, depois embaralhe novamente e sorteie outra (sem
repetição)
• Dica: help(random) - módulo para
aleatoriedade.
• Faça um programa que permita ao usuário digitar o nome
e em seguida mostrar ao usuário de trás pra frente
somente em letras maiúsculas.
• Dica: Procure pela documentação do
help(“”) !
II Workshop de Software Livre - CIN/UFPE - Recife - PE
93
93
95. Dicionários
Um “hash map” pythonico!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
94
94
96. Dicionários
• Estrutura de dados em forma de coleções onde os items são
armazenados e buscados pela chave em vez do deslocamento
posicional.
• Chaves podem ser quaisquer objetos do tipo imutável
• Valores podem ser de qualquer tipo
• Um dicionário pode armazenar diferentes tipos de valores e é mutável!
• Criando e modificando dicionários!
• d = {“user” : “Marcel” , “password”: 2342}
Exemplos3.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
95
95
97. Dicionários
• Dicionários não são ordenados!
• Uma nova chave pode aparecer em qualquerr lugar
• Funciona como “hashing”
• Algums métodos:
• has_key(‘eggs’) , clear() , del d[‘key’] , keys(), values(), items(), get() , update()
• copy() fazer cópias de dicionários ! (Lembre-se que dicionario é mutável!)
Exemplos3.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
96
96
98. Arquivos
Como é fácil manipular um arquivo!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
97
97
99. Arquivos
• Apenas uma linha para abrir um arquivo!
• file = open(“data”, ‘r’) tipos: r, a, w
• Alguns métodos para operações em arquivos:
• file.read(), readline(), readlines(),
• file.write(), writelines(),
• file.close()
Exemplos3.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
98
98
100. Booleanos
Expressões lógicas
II Workshop de Software Livre - CIN/UFPE - Recife - PE
99
99
101. Expressões lógicas
• True e False são constantes em Python
• False : 0, None, [] , {} , 0.0
• True: Valores Numéricos exceto 0, objeto não vazios
• Um dicionário pode armazenar diferentes tipos de valores e é mutável!
• Operadores de comparação: ==, != , < , <=, etc.
• X == Y ( efetua teste de equivalência de valor)
• X is Y (Testa a identidade do objeto)
Exemplos3.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
100
100
102. Expressões lógicas
• None é similar ao NULL em linguagem C
• L = [None] * 100 (declara uma lista de 100 items None )
• Operações com or e and
• not -> inversão lógica (true -> false , false -> true)
• and e or (&& e II)
• isinstance(element,type)
• Verifica se um elemento é do tipo type
Exemplos3
II Workshop de Software Livre - CIN/UFPE - Recife - PE
101
101
103. Exercício 03
II Workshop de Software Livre - CIN/UFPE - Recife - PE
102
102
104. Exercício 04
II Workshop de Software Livre - CIN/UFPE - Recife - PE
103
103
105. Instruções compostas
If python == “cool”:
print “Oh yeah!”
II Workshop de Software Livre - CIN/UFPE - Recife - PE
104
104
106. Fluxo de Controle
• Várias expressões Python para controlar o fluxo do programa.
Todos eles fazem uso de testes condicionais booleanos.
• ifs, else
• loops while, for
II Workshop de Software Livre - CIN/UFPE - Recife - PE
105
105
107. Instruções if
Exemplos4
II Workshop de Software Livre - CIN/UFPE - Recife - PE
106
106
108. Instruções while
Exemplos4
II Workshop de Software Livre - CIN/UFPE - Recife - PE
107
107
109. Instruções while
• Você pode usar o comando break para sair do loop mais
próximo que a envolve.
• Você pode usar o comando continue para pular para o ínicio do
loop mais próximo que a envolve e pular para a próxima
iteração.
• Você pode usar o comando pass quando você não quer que se
faça nada (instrução vazia)
• Você pode o o bloco else do loop para quando se quer executar
um código quando se sai normalmente do loop (sem ser por
comando break)
Exemplos4.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
108
108
110. Instruções for
• Loops for iteram sobre uma sequência de items (listas, tuplas,
string ou quaisquer outros objetos cuja a linguagem considere
como um “iterator”)
• Várias maneiras de iterar sobre um conjunto de items!
• Também possui o bloco else quando se sai normalmente do
loop (similar ao while)
• Função muito usada nos loops for: range()
• range() - Retorna uma lista de números que varia de 0 a ao número passado
como parâmetro.
Exemplos4.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
109
109
111. Instruções for
II Workshop de Software Livre - CIN/UFPE - Recife - PE
110
110
112. Instrução zip
• A função range() percorre sequências de maneira exaustiva. A
função interna zip permite usar loops for para visitar várias
sequências em paralelo.
• zip() é bastante poderoso, pode unir sequências onde retorna
!
uma lista de tuplas que se distribuem em pares os items
paralelos extraídos dessas sequências.
• Permite também facilitar a construção de dícionarios!
!
• x = dict(zip(kes,vals))
!
!
!
!
!
! Exemplos4.py
!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
111
111
113. Compreensão de listas
[i for i in “python é fácil demais”]
II Workshop de Software Livre - CIN/UFPE - Recife - PE
112
112
114. Compreensão de listas
!
!"#$%&&'()"*+&*,-(./( linguagem Python
• Funcionalidade muito poderosa da
• 01.2"'*(3$"%./*4"#$%&(()"*+&*,-(./(5*4%-/*,-(./(*+&*6"%#/* da lista original.
Gera uma lista nova aplicando uma função para cada elemento
• 674-,*&*%7$-+/8*9*3("*+&*4"#$%&(()"*+&*,-(./(*:*;&#* de código!)
!
Muito usado por programadores Python! (Economia
4"#3#*&#*#/..-4/8
• A !sintaxe da compreensão de lista usa-se de palavra-chaves:
0"%*&<&#$,"
! =*>*?<@*A*<*-'*?B*888*CDD
• [expression for name in list]
! E*>*?<*F*<*-'*=*/'+*<*&G&'D
! H#*$1.2"'*.&#"(
! III(*>*J<KKL*6"%*<*-'*%/'M&NOBPQ
! III#*>*J<*6"%*<*-'*(*-6*<RL*>>*BQ
Exemplos4.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
113
113
115. Compreensão de listas
• Permite também o uso de filtros (deteminam se uma
determina expressão deve ser executada sobre um membro da
!
lista)
!"#$%&&'()"*+&*,-(./(012
!
• [expression for name in list if filter ]
3.-,-4/%*+-5-"'6%-"(7*&8&#$,"9
! :::+;<=>",?=9@AAAA7=5&,./=9BCAAA7=D-,E8=9FGAAA7
=?E(5/=91AAAH
! :::$"((-I-,-+/+&(J%-5"*;*K5/%*?"%*5/%*-'*+*-?*+K5/%L*
M*NAAAAL
! :::$"((-I-,-+/+&(J$"I%&*;*K5/%*?"%*5/%*-'*+*-?*
+K5/%L*M*1AAL Exemplos4.py
! O#*(.%-'>(
II Workshop de Software Livre - CIN/UFPE - Recife - PE
! :::*'"#&*;*=P'P'*QQ*OQP'QQ(Q.QP'P'QP'/*
114
?Q%P'P'/QQQ(P'&*P.-QQ'RQQ/Q*Q(QQEP'QSP'&QQP
'P'Q-P'%QQ/QT***P'QQ*P'P'P'P'= 114
116. Exercício 05
• Faça
! um programa que imprima na tela apenas os
números ímpares entre 1 e 50 (usando compreensão de
!"#$%&%'()*+*
listas!)
! ,#-.()/01)2'341)5#)-(0#3)5#)%2133#3)(3)6/1'3)#347()
#3%$'4(3)-()#34'2()/-5#$2'-#)89-(0#:(/4$(:-(0#;<)#)
1=($1)0/5(/>3#)()?15$7()?1$1)@10#2@13#+)A#5#>3#)/0)
2'341)%(0)(3)-(0#3)4(5(3)#0)@10#2@13#+
! BBB2'341:-(0#:%2133#3CD94#21:?$'-%'?12;E;01?1:5
#:5'3?(3'4'F(3;E;%2133#:-#=(%'(:?#315(;E;1%/0/21
5($;E;G'0:51:2'341:5#):5#:%2133#3:5(:#"#$%'%'(;H
! I'%1J
! K3#)13)G/-LM#3)34$+4'42#)#)34$+3?2'4
II Workshop de Software Livre - CIN/UFPE - Recife - PE
! N#?(341O 115
! $#3?(341)C)DPP+Q('-8DR+4'42#8<)G($)R)'-)SH<)G($)S)'-) 115
118. Definindo Funções
Definição da função inicia com “def ”
II Workshop de Software Livre - CIN/UFPE - Recife - PE
117
117
119. Definindo Funções
Definição da função inicia com “def ” Nome da função
II Workshop de Software Livre - CIN/UFPE - Recife - PE
118
118
120. Definindo Funções
Definição da função inicia com “def ” Nome da função Argumentos
II Workshop de Software Livre - CIN/UFPE - Recife - PE
119
119
121. Definindo Funções
Definição da função inicia com “def ” Nome da função Argumentos
Identação
II Workshop de Software Livre - CIN/UFPE - Recife - PE
120
120
122. Definindo Funções
Definição da função inicia com “def ” Nome da função Argumentos
Identação
“return” indica o
retorno da função
II Workshop de Software Livre - CIN/UFPE - Recife - PE
121
121
123. Definindo Funções
Definição da função inicia com “def ” Nome da função Argumentos
Identação
“return” indica o
retorno da função
Sem header file
Sem declaração do tipo de retorno da função ou do tipo dos argumentos
II Workshop de Software Livre - CIN/UFPE - Recife - PE
122
122
124. Chamando uma função
• Sintaxe básica para chamar uma função:
>>> def myfun(x, y):
return x * y
>>> myfun(3, 4)
12
Exemplos5.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
123
123
125. Passagem de parâmetros
• Várias métricas podem ser usadas na passagem dos parâmetros
de uma função:
>>> def myfun(x, y):
return x * y
>>> myfun(3, 4)
12
>>> myfun(y=3, x=4)
12
>>> myfun(3, y=4)
12
Exemplos5.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
124
124
126. Parâmetros com valores padrões
• Cada parâmetro pode ter um valor padrão.
• Utilizado quando um parâmetro é omitido na chamada da função
def myfun(x, y = 0.3, prompt = True):
res = x * y
if prompt:
print “Resposta é %f”, res
return res
Exemplos5.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
125
125
127. Parâmetros com valores padrões
def myfun(x, y = 4, prompt = True):
res = x * y
if prompt:
print “Resposta é %i”, res
return res
• Esta função pode ser invocada de várias formas:
>>> myfun(3)
Resposta é 12
12
>>> myfun(x=3, prompt = False)
12
>>> myfun(5, 2, False)
10 Exemplos5.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
126
126
128. Valor de retorno
• Toda função em Python retorna alguma valor;
• Mesmo funções que não possuem a cláusula return.
• Funções que não possuem return retornam None.
• None é uma constante especial definida na linguagem;
• Similar a NULL, void, ou nil em outras linaguagens;
• É lógicamente equivalente à False;
• O interpretador não imprime None.
II Workshop de Software Livre - CIN/UFPE - Recife - PE
127
127
129. Valor de retorno
• Uma função pode retornar mais de um valor
>>> def teste():
x = 1
y = 2
z = 3
return x, y, z
>>> x, y, z = teste()
>>> ret = teste()
>>> ret
(1, 2, 3)
Exemplos5.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
128
128
130. Algumas funções especiais
... e Python também tem seu momento funcional!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
129
129
131. Parâmetros args
Exemplos5.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
130
130
132. Funções map, reduce e filter
• Função map(func, seq)
• Função interna que aplica uma função func a cada item de um objeto sequência
(seq) e retorna uma lista com os resultados da chamada da função.
• Função filter(func, seq)
• Função interna que aplica uma função filtro func a cada item de um objeto
sequência (seq) e retorna uma lista com os resultados que satisfazem os critérios
da função de teste seq.
Exemplos5.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
131
131
133. Módulos
... Módulos: o que é, como criar e como utilizar.
II Workshop de Software Livre - CIN/UFPE - Recife - PE
132
132
134. Introdução 1/2
• Quando você encerra o interpretador, todas as definições de
variáveis e funções são perdidas;
• Solução é gerar um script e roda-lo.
• Mas e se você desejar utilizar um determinada função do script
em outro programa?
• Solução são os módulos!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
133
133
135. Introdução 2/2
• Um módulo é um arquivo .py contendo definições e comandos
Python:
• Funções
• Variáveis e constantes
• Classes
• ...
• Vantagem é a possibilidade de adicionar todas estas definições
em outros arquivos ou módulos.
• Isto é feito utilizando a cláusula import
II Workshop de Software Livre - CIN/UFPE - Recife - PE
134
134
136. Executando módulos como scripts
• Rodar um módulo Python é similar a importar as definições do
módulo para o interpretador.
• Se você fizer python meuModulo.py irá carregar as definições e destruir
logo em seguida!
• Para executar algum determinado código de maneira similar à
um script você deve testar a cláusula __name__ :
if __name__ == “__main__”:
print “Execute algum código”
Exemplos5.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
135
135
137. Pacotes
• Pacotes são coleções de módulos Python.
• Qualquer diretório do sistema operacional que contém um arquivo __init__.py
dentro é considerado um pacote.
• Pacotes organizam módulos e permitem que programadores importem módulos
da seguinte maneira:
• import meuPacote.meuSubPacote.meuModulo
# meuPacote/
# __init__.py -- vazio
# meuSubPacote/
# __init__.py -- vazio
# meuModulo.py -- modulo importado
II Workshop de Software Livre - CIN/UFPE - Recife - PE
136
136
138. Caminho de busca dos módulos
• Quando você executa import meuModulo o interpretador
procura pelo arquivo meuModulo.py seguindo uma determinada
regra.
• Primeiramente ele procura pelo arquivo no diretório corrente (onde o interpretador
foi executado).
• Caso ele não encontre o arquivo no diretório corrente, a busca prossegue em uma
lista de diretórios que é especificada na variável sys.path
• Você pode atribuir novos diretórios de busca na variável
sys.path (ela é uma lista dentro do módulo sys da biblioteca
padrão)
• Útil quando você quer instalar seu módulo na máquina de um usuário.
II Workshop de Software Livre - CIN/UFPE - Recife - PE
137
137
139. Compilando um módulo Python
... Compilando??? Como assim??? Python não é
interpretado???
II Workshop de Software Livre - CIN/UFPE - Recife - PE
138
138
140. Compilando um módulo Python
• Sim, Python é e continua sendo interpretada!
• Python utiliza o conceito de byte-code (muito conhecido em Java).
• O que acontece quando você importa um módulo:
• 1) - Interpretador busca pelo arquivo .py correspondente;
• 2) - Arquivo .py é “compilado” para o byte-code reconhecido pelo interpretador;
• 3) - Byte-Code é incorporado a tabela de símbolos correntes do interpretador.
II Workshop de Software Livre - CIN/UFPE - Recife - PE
139
139
141. Compilando um módulo Python
• Compilação para byte-code pode ser um gargalo de
desempenho quando você carregar um programa!
• Especialmente se você utiliza muitos módulos em seu programa.
• Solução é pré-compilar os módulos antes de rodar seu
programa!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
140
140
142. Exercício 06
•
II Workshop de Software Livre - CIN/UFPE - Recife - PE
141
141
143. QuickSort
• Algoritmo de ordenação bastante utilizado e muito eficiente
• Complexidade BigO(nlogn)
1 . Escolher um pivô inicial x;
2. Colocar todos itens com chave menor que a de x à esquerda de x, formando
uma seqüência S1;
3. Colocar todos itens com chave maior que a de x à direita de x, formando uma
seqüência S2;
4. Isto feito, o mesmo processo é aplicado às seqüências S1 e S2, que por sua vez
produzirão novos segmentos;
5. O processo deve ser aplicado sucessivamente às seqüências enquanto
elas tiverem tamanho ≥ 1;
II Workshop de Software Livre - CIN/UFPE - Recife - PE
142
142
144. QuickSort
• Você pensaria assim...
def partition(list, l, e, g):
if list == []:
return (l, e, g)
else:
head = list[0]
if head < e[0]:
return partition(list[1:], l + [head], e, g)
elif head > e[0]:
return partition(list[1:], l, e, g + [head])
else:
return partition(list[1:], l, e + [head], g)
II Workshop de Software Livre - CIN/UFPE - Recife - PE
143
143
145. QuickSort
• Agora que você sabe compreensão de listas, você pode fazer
assim!
def qsort(L):
if len(L) <= 1: return L
return qsort( [ lt for lt in L[1:] if lt < L[0] ] ) + [ L[0] ] +
qsort( [ ge for ge in L[1:] if ge >= L[0] ] )
• E não é que lembra a linguagem funcional Haskel ?!
# qsort [] = []
# qsort (x:xs) = qsort elts_lt_x ++ [x] ++ qsort elts_greq_x
# where
# elts_lt_x = [y | y <- xs, y < x]
# elts_greq_x = [y | y <- xs, y >= x]
II Workshop de Software Livre - CIN/UFPE - Recife - PE
144
144
146. Ordenação
• Mas um programador Pythonico, ainda faria mais eficiente!
list.sort()
• Utiliza-se de uma implementação nativa de Python para
ordenação de sequências! Mais eficiente, híbrido com
complexidade no pior caso de nlogn.
II Workshop de Software Livre - CIN/UFPE - Recife - PE
145
145
147. Python é muito poderoso!
• Não precisa reinventar a roda! Molde-a para adaptar ao seu
problema!
• A documentação de Python é bastante vasta e há muitas
funcionalidades prontas!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
146
146
148. Chegamos ao fim! =D
Hora da random.choice([pergunta, dúvida, discussão]) !!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
147
147
149. Referências
• I Workshop CINLUG de Python (Ministrado no CIN)
• http://www.cin.ufpe.br/~cinlug/files/workshop-python.1.pdf
• http://www.cin.ufpe.br/~cinlug/files/workshop-python.2.pdf
• Mini-Curso de Introdução a Python (Avaty Tecnologia e Info.)
• http://www.avaty.com.br/artigos/CURSO-PYTHON.pdf
II Workshop de Software Livre - CIN/UFPE - Recife - PE
148
148
150. Hello, I am Python!
Marcel Caraciolo
Mini-Curso De Introdução a Python
II Workshop de Software Livre - CIN/UFPE - Recife - PE
149
149