Download Slide 1 - Universidade Federal do Acre

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
SOCIEDADE BRASILEIRA DE COMPUTAÇÃO
I Escola Regional de Informática – Norte 3 (Acre/Rondônia) – ERIN3
MCS2
Conhecendo a Linguagem Python
Marcos Thomaz da Silva
Novembro de 2011
Sobre o Autor
• Especialista em Bancos de Dados;
• Graduado em Sistemas de Informação pela
Universidade Federal do Acre;
• Analista de Sistemas da Universidade Federal do Acre;
• Moderador da Lista Django Brasil;
• Moderador da Lista Active Delphi;
• Trabalha com desenvolvimento de sistemas desde o
ano de 1994, atuando com diversas linguagens: Clipper,
Delphi, PHP e Python
• Entusiasta de diversas outras linguagens de
programação: C/C++, Cobol, Java, Ruby;
• Desenvolvedor para PalmOS;
• Atua com bancos de dados Firebird, DB2, MySQL,
PostgreSQL e Oracle.
Histórico Sobre a Linguagem
• Criada em 1991 (versão 0.9.0) por Guido
van Rossum;
• Nome recebido como homenagem ao
grupo de humoristas Monty Python;
• Versão 1.0 lançada em 1994;
• Versão 20 lançada em 2000;
• Atualmemente é utilizada em duas
vertentes: 2.X (7) e 3.0;
Características da Linguagem
• Sintaxe de alto-nível, simples e fácil de ser
assimilada;
• Tipagem dinâmica;
• Tipagem forte;
• Interpretada (compilada para bytecode);
• Lincença de Código Aberto;
• Multiplataforma (Unix, Linux, Windows, Maemo)
Características da Linguagem
• Existe nativamente em sistemas Operacionais
Linux e MacOS;
• Utilizado no desenvolvimento Web, Desktop
(GTK, QT);
• Orientada a objetos;
• Gera executáveis através de utilitários
(cx_freeze, py2Exe);
• Console interativo
• Primeira Linguagem Implementada no GAP
(Google App Engine)
Utilização de Python
• Python para Web
– Possui diversos frameworks para
desenvolvimento de aplicações Web, entre os
mais conhecidos estão: Zope, Django,
Web2Py, Turbogears, Flask, GAP;
– O Zope é um framework para aplicações de
alta escalabilidade, um dos primeiros a
implementar o conceito de No-SQL, e
possuidor de diversos tipos de cache
(memcached, ramcache, file);
Utilização de Python
• Gerenciadores de Conteúdo (CMS)
– Diversas ferramentas de gerenciamento de
conteúdo: Plone (Utiliza Zope), DjangoCMS,
LFS, X5;
– O plone atualmente é utilizado por boa parte
dos portais governamentais (presidencia,
siape, legislativo)
Utilização de Python
• Gestão Empresarial
– Aplicativos de gestão comercial, CRM,
Vendas, Gerenciamento de Postos de
Gasolina: Stoq, ERP5, OpenERP;
– Aplicações como o Stoq implementam uma
série de frameworks, bibliotecas e métodos ,
tais como um ORM (SQLAlchemy), MVC
(Kiwi), Desenho de telas (Gazpacho),
Ambiente desktop multiplataforma (PyGTK) e
banco de dados Postgre
Utilização de Python
• Dispositivos Móveis;
– Desenvolvimento para Celulares (PyS60), tablet’s
(PyQT e PySide), PSP;
• Multimídia e Entretenimento;
– Desenvolvimento de Jogos (PyGame, PyMedia,
PyOpenGL), Imagens 3D (Aplicativo Blender – Utiliza
PyGame) e demais imagens (PIL)
• Ciência
– Bibliotecas de uso científico (Scipy), matemático
(NumPy) e outros (BioPython, AstroPy).
IDE’s (Integrated Development
Environment) e Editores
• Livres
– PyDev, Eric, Pida, Boa-Constructor
(semelhante ao Delphi 3), Eclipse;
• Proprietárias
– Komodo, WingIDE, Aptana, PyCharm
Editores de Texto
– Vi/Vim, Emacs, SciTE, gedit, Textmate,
Notepad++
Por que Python?
• Possui orientação a objetos (inclusive, com suporte a
herança múltipla), exceções, diversos módulos;
• Sintaxe simples, prática e objetiva;
• Executa em diversas plataformas sem a necessidade de
recompilar;
• Por utilizar identação (ou endentação) como bloco de
código, garante a legibilidade do código;
• Possui recursos de integração com outras linguagens
como C/C++, Java (Jython), NET (IronPython);
• Possui comunidade forte, tanto no Brasil quanto fora;
Quem utiliza Python
• Google (GAP, Youtube);
• Industrial Light & Magic (Indústria de computação
gráfica);
• DreamWorks;
• Laboratórios da Nasa;
• AstraZeneca (farmacêutica);
• Siapenet (Servidor Público);
• Embrapa;
• Nokia;
• AOL Music;
• CIA
Iniciando com a Linguagem
• Fazer o download da linguagem:
– http://www.python.org/download/
• Instalar a linguagem (se necessário)
• Abrindo o interpretador:
– Ir a um terminal, digitar “python” e pressionar
ENTER;
• “import this”
Conhecendo o interpretador
• Usando como uma calculadora
– “2 + 2”; “7/3”; “7/3.0”; “5*3”; “7-1”
• Executando um arquivo
– Abrir um editor de textos (pode ser o “vi”, “nano”,
“bloco de notas”);
– Digitar:
• print “Oi mundo!”
– Salvar como oimundo.py
– No terminal, digitar:
• python oimundo.py
Estrutura de Arquivo Fonte
• Linhas opcionais:
– Podem existir nas primeiras linhas do código
fonte (semelhante ao content-type do html);
• # -*- coding: encoding -*
• !/usr/python
• Código
• Verificação de chamada:
– if __name__== “__main__”
Linguagem
• Não possui delimitadores de linha (estilo o “;” do
PHP);
• Delimitadores de bloco de código definidos por
identação/endentação (sem o begin/end do
pascal ou chaves do php, C/C++ ou Java);
• Poucas palavras reservadas;
• Sem a necessidade da declaração de variáveis
(tipagem dinâmica);
• Comentários são marcados por #
• Ajuda no interpretador interativo: comando help
• Pythonpath
Linguagem: Tipos
• Tipos Básicos:
– Inteiro;
– Ponto-Flutuante;
– Strings (É possível utilizar ‘, “ ou ‘’’/”””).
• Tipos de Sequencia:
–
–
–
–
Tuplas – () - Imutável;
Listas – [] – Mutável;
Dicionários – {} - Mutável;
Strings – Imutável;
• Tipos avançados:
– datetime
• Para saber o tipo da variável: type
Linguagem: Declarando Variáveis
• O python não utiliza nenhum delimitador
para variáveis (como o PHP ou o Ruby)
• k = 3 #declara a variável K como inteiro
• l = “ERIN” #declara string
• pi = 3.14 #ponto-flutuante
• tupla = (1,3,5, “oi” )
• lista = [ 1, 3, 5, 8 ]
• dicionario = { ‘A’:1, ‘B’:2, ‘4’: 5}
Linguagem: Informações do
Usuário
• input( <texto> )
• raw_input( <texto> )
• Exemplo:
– nome = raw_input(“Digite seu nome:”)
– idade = input( “Digite sua idade:” )
– print ‘Oi %s, voce tem %s anos’%( nome, idade)
Linguagem: Operadores
• Aritméticos: +, -, *, /, % (resto da divisão),
** (potência)
• Separador decimal: “.”
• Cadeia de bits: >>, <<, ~, &, |
• Atribuição: =, +=, -=, /=, *=
• Comparação: ==, !=, >, <, >=, <=, “in”
• Lógicos: “and”, “or”, “not”
Linguagem: Estruturas de Controle
• Condicionais: if / elif
if a > 1:
print ‘A > 1’
• Laço iterativo: for
p = ‘Python’
for l in p:
print l
• Laço condicional: while
a, i = 10, 1
while i<a:
if ( i % 2 ) == 0:
print i
i=i+1
• break / continue
Linguagem: Funções
• Sintaxe
def nome_da_funcao( parametros ):
instruções
return retorno
•
•
•
•
Argumentos nomeados
Argumentos indefinidos (operador * )
Argumentos indefinidos (operador **)
locals() e global()
Exercícios de Fixação I
1.
2.
3.
4.
5.
6.
Usando o interpretador interativo, calcule as seguintes contas: 1
+ 2000, 524 / 12, 25 / , 27 / 2.0, 254-326
Crie um arquivo que receba o nome do cliente e seu endereço e
imprima a frase: “<cliente> mora em <endereco>” substituindo
<cliente> e <endereco> pelos valores recebidos
Crie uma função que solicite dois números(variáveis A e B), e
faça a inversão destes valores
Crie uma função que pegue um número indefinido de parâmetros,
e diga qual o valor é o maior
Crie um arquivo onde o usuário tenha que informar um número
inteiro, positivo, menor que 50, e imprima os valores ímpares que
estão dentro deste intervalo.
Crie uma função que peça o nome e salário, enquanto o nome
esteja sendo preenchido. Ao término da iteração, exiba a
quantidade de pessoas que foram informadas, e a soma total dos
salários.
Lambda
• O que são
• Quando utilizar
• Exemplo:
dobro = lambda numero : numero * 2
print dobro( 6 )
Trabalhando com listas
•
•
•
•
Adicionando elementos (append): itens, e listas
Ordenando listas
Percorrendo listas (usando len e in )
Slice (fatiando) listas:
lista[ <inicio : <fim> : <salto> ]
lista = range( 0, 21, 2 )
lista[0:5]
lista[5:]
lista[:5]
lista[-1]
lista[-2:]
Lista[::1]
• Curiosidades:
a = [1, 2, 3, 4, 5]
b=a
a.append(a)
print b
Trabalhando com listas
• split
nome = ‘ESTADO DO ACRE’
lista = nome.split()
• join
lista = [‘arroz’,’feijão’,’batata’,’macarrão’]
alimentos = ‘,’.join( lista )
print ‘Alimentos ’+alimentos
• Repetindo dados: operador “*”
• Somando listas: operador “+”
Funções úteis: map, reduce
• map
– Processa uma lista e retorna outra (mapeamento)
– Exemplo: gerar uma lista, baseada em outra,
multiplicando seus itens por 3.
lista1 = [1, 2, 3]
lista2 = map(lambda x: x * 3, lista1)
print lista2
• reduce
– Processa uma lista e reduz para um único valor
– Exemplo: somar o valor de todos os valores de uma
lista.
lista1 = [1, 2, 3]
soma_triplo = reduce( lambda x, y: x+y , lista1)
Exercícios de Fixação II
1.
2.
3.
4.
5.
6.
Crie uma função que receba uma frase e imprima ao contrário
(por exemplo, a palavra “ACRE” seria impresso “ERCA”)
Crie uma função que receba uma palavra e um número, e
replique essa palavra a mesma quantidade de vezes informada
pelo número
Crie um código que pegue uma lista composta de valores inteiros
e retorne a soma do triplo de seus itens
Crie uma função que receba uma lista e imprima o maior
elemento, o menor e a soma de todos os elementos
Crie uma função que peça o nome e salário, enquanto o nome
esteja sendo preenchido. Ao término da iteração, exiba a
quantidade de pessoas que foram informadas, e a soma total dos
salários, o menor deles, o maior, e a lista de todas as pessoas
com seus respectivos salários
Complemente a função anterior, ordenando a lista por ordem
crescente de salário antes de imprimí-la.
Módulos
• Conjunto de códigos (biblioteca)
• Arquivo __init__.py
• Sintaxe:
– import modulo
ou
– from modulo import Funcao1, Funcao2
• Evitar incluir o módulo todo
Módulos
• Curiosidade: Tomando a estrutura como exemplo (usando como
pacote)
– pasta1
•
•
•
•
arquivo1.py
arquivo2.py
__init__.py
pasta2
– arquivo3.py
– arquivo4.py
– __init__.py
• Poderíamos fazer:
– from pasta1.pasta2 import arquivo3
– from pasta1.pasta2.arquivo3 import Funcao3
• E teríamos (respectivamente):
– arquivo3.Funcao3( parametro ); ou
– Funcao3( parametro ).
Módulos: Testando no interpretador
import calendar
calendar.prmonth(2011, 11)
calendar.prcal(2011)
Principais Módulos
•
•
•
•
•
•
•
•
sys: oferece várias operações referentes ao próprio interpretador. Inclui: path, uma lista dos
diretórios de busca de módulos do python, argv, a lista de parâmetros passados na linha de
comando e exit(), uma função que termina o programa.
time: oferece funções para manipular valores de tempo. Inclui: time(), uma função que retorna
o timestamp14 atual; sleep(n), que pausa a execução por n segundos; e strftime(n), que
formata um timestamp em uma string de acordo com um formato fornecido.
os: oferece funções relacionadas ao ambiente de execução do sistema. Inclui: mkdir(), que
cria diretórios; rename(), que altera nomes e caminhos de arquivos; e system, que executa
comandos do sistema.
os.path: oferece funções de manipulação do caminho independente de plataforma.
Inclui: isdir(p), que testa se d é um diretório; exists(p), que testa se p existe; join(p,m), que
retorna uma string com os dois caminhos p e m concatenados.
string: oferece funções de manipulação de string (que também estão disponíveis como
métodos da string). Inclui: split(c, s, p), que divide a string c em até p partições separadas pelo
símbolo s, retornando-as em uma lista; lower(c), que retorna a string c convertida em
minúsculas; e strip(c), que retorna c removendo espaços e quebras de linha do seu início e
fim.
math: funções matemáticas gerais. Inclui funções como cos(x), que retorna o cosseno
de x; hypot(x, y); que retorna a distância euclidiana entre x e y; e exp(x); que retorna o
exponencial de x.
random: geração de números randômicos. Inclui: random(), que retorna um número
randômico entre 0 e 1; randrange(m,n), que retorna um randômico entre m e n; choice(s), que
retorna um elemento randômico de uma seqüência s.
getopt: processamento de argumentos de comando de linha; ou seja, os parâmetros que
passamos para o interpretador na linha de execução. Inclui: getopt(), que retorna duas listas,
uma com argumentos e outra com opções da linha de comando.
Outros Módulos Importantes
• datetime: fornece funções e métodos para
controle de datas.
• PIL / Image: funções e métodos para
controlar e modificar imagens
• Decimal: funções de decimais (muito
usado para trabalhar com valores
monetários).
• Reportlab: Geração de arquivos PDF
Trabalhando com arquivos
• open
– Métodos de abertura: w, r, w+, r+
– arquivo = open( ‘caminho/do/Arquivo’ , ‘r+’) # abre o arquivo
para leitura e alteração
– os.path.exists() #verifica se o arquivo existe
• read / realines
– linhas = arquivo.readlines() #carrega uma lista com as linhas do
arquivo
• write
– arquivo.write( ‘nova linha’) #escreve no arquivo
• seek
– arquivo.seek( 5 ) #vai para o sexto byte
• tell
• close
Erros e Exceções
• Tratar exceções
– Sintaxe:
try:
bloco de codigo
except Excecao1:
mensagem de tratamento
except Excecao2:
mensagem de tratamento
• Levantar exceções
– raise Exception(‘Mensagem de Erro’)
Strings de Documentação
• Para que servem
• Como utilizar:
def funcao( p1 ):
‘’’
O parametro p1 é um inteiro
‘’’
return p1 * 2
help( funcao )
print funcao.__doc__
Palavras Especiais
•
•
•
•
•
•
•
•
__name__
__file__
__init__
__call__
__sum__
__sub__
__mul__
__div__
Funções Pré-Definidas
• range / xrange: retorna uma lista
• chr: retorna o caracter correspondente ao número. (por exemplo 65
é igual a “A”).
• len: retorna o tamanho da lista
• ord: retorna o número referente ao caracter
• round: arredonda um ponto-flutuante
• pow: calcula potência
• min: menor valor de uma lista
• max: maior valor de uma lista
• abs: valor absoluto de um número
• float: converte um número para float
• str: converte um número para string
• int: converte algo para inteiro
• sum: soma os elementos de uma lista
Exercícios de Fixação III
1.
2.
Crie uma função que peça o nome e salário, enquanto o nome esteja sendo
preenchido. Ao término da iteração, exiba a quantidade de pessoas que foram
informadas, e a soma total dos salários, o menor deles, o maior, e a lista de todas
as pessoas com seus respectivos salários. Armazene a lista em um arquivo. Em
outra função, abra este arquivo e reimprima as informações. O código deve
verificar se o arquivo existe. As funções comuns (exibir informações), devem ser
colocadas em um arquivo separado.
Tendo como dados de entrada a altura e o sexo de uma pessoa, construa um
algoritmo que calcule seu peso ideal, utilizando as seguintes fórmulas:
•
•
•
3.
Monte uma função que receba como entrada uma frase e imprima-a como uma
escada. Por exemplo, a palavra ACRE.
•
•
•
•
4.
Para homens: (72.7*h) - 58
Para mulheres: (62.1*h) - 44.7 (h = altura)
Peça o peso da pessoa e informe se ela está dentro, acima ou abaixo do peso.
A
AC
ACR
ACRE
Crie uma função que receba como entrada o caminho completo de um arquivo,
indique qual a maior linha do arquivo e imprima-a
Orientação a Objetos: Classes
• Uma classe é um molde de uma instância, ou
seja, um modelo que indica quais os métodos e
atributos um objeto deve ter.
• Sintaxe:
class MinhaClasse:
<atributos>
<métodos>
• Ou então:
class MinhaClasse( object ):
<atributos>
<métodos>
Orientação a Objetos: Classes
• Exemplo:
class Aluno(object):
‘’’
Classe que define um aluno
‘’’
nome = None
nota = None
def situacao( self ):
return ‘AP’ if nota and nota > 5 else ‘RP’
Orientação a Objetos: Classes
• Construtores
class Retangulo(object):
base = altura = None
__cor = ‘azul’ #método protegido
def __init__(self, b, a):
self.base, self.altura = b, a
def area(self):
return self.base * self.altura
R = Retangulo( 5, 4 ) #instancia de Retangulo
Orientação a Objetos: Herança
• Classe Pai
class Forma(object):
__cor = ‘azul’ #método protegido
def setCor(self, cor):
self.__cor = cor
class Quadrada(object):
base = altura = None
def __init__(self, b, a):
self.base, self.altura = b, a
def area(self):
return self.base * self.altura
• Classe Herdada
class Retangulo(Forma, Quadrada):
pass
R = Retangulo( 5, 4 ) #instancia de Retangulo
• Herança Múltipla (ordem de pai indica ordem de
métodos)
Orientação a Objetos: Herança
• Reaproveitando código da classe pai:
class Retangulo(Forma, Quadrada):
def area_ao_quadrado( self ):
return super(Retangulo,self).area() ** 2
Ou
class Retangulo(Forma, Quadrada):
def area_ao_quadrado( self ):
return Quadrada.area(self) ** 2
Orientação a Objetos: Exceções
• Exceções Também São Classes
• A classe base das exceções é a Exception
• Podem ser definidas classes de Exceção
para melhorar o controle e mensagens de
erro.
Orientação a Objetos: Polimorfismo
class Forma(object):
cor = ‘Azul’
base = altura = None
def getCor( self , c ):
self.cor = c
def __init__(self, b, h):
self.base, self.altura = b, h
def area(self):
pass
class Quadrado(Forma):
def area(self):
return self.base * self.altura
Class TrianguloRetangulo(Forma):
def area(self):
return (self.base * self.altura)/2
Orientação a Objetos:
Encapsulamento
class Quadrado(object):
base = altura = None
def __init__(self, b, h):
self.base, self.altura = b, h
def __getArea(self):
return self.base * self.altura
def __setArea(self,a):
from math import sqrt
if a <= 0:
raise Exception(‘Valor tem que ser maior que zero’)
base = altura = sqrt( a )
area = property( __getArea, __setArea )
q = Quadrado(2, 2)
q.area = 64 #valor de base e de altura fica 8
O que mais existe
•
•
•
•
•
A linguagem python não pára aí...
Annotations
C Bindings
Iterators
Metaclasses
Orientação a Objetos: Pequena
Brincadeira
class Linguagem(object):
nome = None
def __init__(self, nome):
self.nome = nome.capitalize()[0] + nome.lower()[1:]
def mostra(self):
import string
t = 'JA'+string.printable+'VA'+string.printable+string.ascii_letters
cp,tnome = ';hc076', string.translate(self.nome,t)
print ('Super ' if cp == tnome else '')+self.nome
def __add__(self, valor):
print 'Aqui'
if isinstance( valor , int ):
return self.nome * valor
elif isinstance( valor, Linguagem):
if self.nome=='Python' and valor.nome == 'Java':
return 'Jython'
else:
return self.nome+'/'+valor.nome
else:
raise Exception('Tipos Invalidos')
Orientação a Objetos: Pequena
Brincadeira
l0 = Linguagem('python')
l1 = Linguagem('java')
l0.mostra() ## o que é mostrado aqui?
l1.mostra() ## e aqui?
l2 = Linguagem('python')
print (l2 + l1) ## e aqui?
print l2.nome ## e aqui?
print l2 + 4 ## e aqui?
Término
• Crescimento da Linguagem
• Amplo mercado de trabalho
• Considerações finais
Obrigado!
Links Interessantes
•
•
•
•
•
•
•
•
•
•
http://www.python.org.br
http://www.python.org
http://www.django-project.com
http://pydev.sf.net/
http://www.die-offenbachs.de/detlev/eric.html
http://pida.berlios.de/
http://www.activestate.com/Products/Komodo/
http://www.wingware.com/
http://www.jetbrains.com/
http://ark4n.files.wordpress.com/2009/05/python_para_desenvolved
ores.pdf
• http://ark4n.files.wordpress.com/2010/01/python_para_desenvolved
ores_2ed.pdf