View
1.061
Download
0
Category
Preview:
Citation preview
Julio Cesar Eiras Melanda - jcemelanda@gmail.com14/10/09
ConteúdoObjetivos
O que é Python
Características Importantes
Paradigma
Compilação
Tipagem
Escopo de variáveis
Multiplataforma
Estruturas de dados nativas
Outras características
Conteúdo (cont.)Programando
Começando...
Sintaxe básica
Fora do interpretador
Controle de fluxo – seleção
Controle de fluxo – laço
Controle de fluxo – laço
'Abrangência' de listas – List comprehension
Subprogramas
Orientação a Objetos
Programação funcional
Conteúdo (cont.)
Módulos
Importando módulos
Módulos da biblioteca padrão
A função dir()
Outros módulos
Programas que usam Python
Referências
Objetivos
Apresentar a linguagem de programação Python em sua versão 2.x pois houve quebra de compatibilidade na versão 3.0 que ainda não é largamente usada.
Desta forma, serão abordados tópicos referentes ao projeto da linguagem, suas características, exemplos de como funciona a programação e programas que usam esta linguagem que está entre as que mais vem crescendo em importância nos últimos anos.
O que é PythonPython é uma linguagem de programação poderosa e fácil de aprender que possui estruturas de alto nível, com uma abordagem simples e efetiva à programação orientada a objetos. [1]
Foi criada no início da década de 90 por Guido van Rossum na Holanda no Stichting Mathematisch Centrum. Todos os releases, exceto 1.6, 1.6.1 e 2.0 são distribuídos sob licença GPL-compatível. [2]
O nome vem do show da BBC “Monty Python's Flying Circus”, e não das cobras de mesmo nome.[1]
Python é muito versátil podendo ser usada em aplicativos Web do lado servidor, jogos, programas de controle e configuração de sistemas, scripts, editores de imagens, music players, Web browsers e muito mais.
Características Importantes
Características ImportantesParadigmas
Multi-paradigma
Orientada a Objetos
Procedural
Funcional
Scripting
Compilação
Interpretada
Programação interativa
Bytecodes
Características Importantes
Tipagem
Dinâmica
Forte
Escopo de variáveis
Estático com vinculação dinâmica
Podem ser acessados diretamente:
Variáveis locais
Variáveis globais
Variáveis externas (nomes pré-definidos)
Características ImportantesMultiplataforma
Windows
GNU/Linux
MacOS
PalmOS
Symbian
Estruturas de dados nativas
Listas
Dicionários
Tuplas
Conjuntos
Características Importantes
Outras características
Tudo é objeto (inclusive tipos de dados)
Tipo nativo para números complexos
Extensa biblioteca padrão
Muitos módulos externos
Suporta coerção
Programando
Começando...Na programação interativa, basta abrir o interpretador e digitar os comandos
>>> print “Olha eu aqui!” #isto é um comentário
Olha eu aqui!
>>> x = '3' #Não precisa declarar x
>>> x #Mostra o objeto vinculado ao nome x
'3'
Sintaxe Básica
Blocos são definidos por identação
>>> i = 0 #Sem ';' no final da instrução
>>> while i < 2: #Sem begin ou {
... print i, #vírgula evita quebra de linha
... i += 1 #operador de atribuição composto
... #sem end ou }
0 1
O ':' indica que a próxima instrução faz parte de um bloco
Fora do interpretadorCódigo fonte em arquivo .py
Exemplo:
#!/usr/bin/env python
#-*- coding: utf8 -*-
#mentira.py
'''Mostra uma mentira na tela'''
print “Não fui eu!!!”
Primeira linha para chamar o interpretador python (somente em Unix-like)
Segunda linha conta para o interpretador qual a codificação do arquivo. Sem ela, é levantada uma exceção se houver caracteres não ASCII.
Fora do interpretador (cont.)
A terceira linha é um comentário com o nome do arquivo python. É convenção colocar este comentário em todos os arquivos criados.
A quarta linha é uma dosctrnig (texto de documentação). Todos objetos devem ter uma docstring antes de começar com as instruções propriamente (convenção).
Finalmente a instrução que será interpretada e executada
Controle de fluxo - seleçãoEm python não existe switch
if x < 0:
pass #usado para não fazer nada
else:
pass
if y == 1: #if e elif funcionam como cases
pass #com a vantagem de aceitar
elif y > 2: #expressões
pass
else: #Faz o papel do default
pass
Controle de fluxo - seleçãoFazer um switch usando dicionários:
def case_1():
print "um"
def case_2():
print "dois"
def case_3():
print "tres"
switch ={'1':case_1,
'2':case_2,
'3':case_3}
x = raw_input()
try: #pega excessão
switch[x]()
except:
print "default"
Controle de fluxo - laçoTemos duas instruções para laços – for e while (não tem do)
while executa um laço condicional pós-teste
while x >= 0:
y = x * x
x -= 1
for executa iteração sobre uma lista
for i in [1, 2 ,3 ,4]:
print (' i vale %d') % i
Podemos gerar listas com a função range()
>>> range(5)
[0, 1, 2, 3, 4]
Controle de fluxo - laço
Para controle com instruções localizadas pelo usuário temos as instruções break e continue do mesmo modo que em C
Para os casos em que o laço terminar normalmente significa algo, usa-se a instrução else
for i in range(2, 10):
for n in range(2, n):
if i % n == 0:
print i, '=', n, '*', i/nbreak
else:
print i, 'é um número primo'
'Abrangência' de listas
Utilizado para avaliar listas de forma clara e concisa.
>>> vet = [2, 4, 6]
>>> [3*x for x in vet]
[6, 12, 18]
>>> [[x,x**2] for x in vet]
[[2, 4], [4, 16], [6, 36]]
>>> [2*x for x in vet if x > 3]
[8, 12]
Subprogramas
Todos subprogramas são funções
Funções sem return, ou com return sem parâmetros retornam None
def fib(n):
''' Calcula fibonacci até n '''
a, b = 0, 1 #Atribuições simultâneas
while b < n:
print b
a, b = b, a + b #Avalia da esquerda #para a direita
Subprogramas (cont.)def continuar(opcao = true):
''' continua alguma coisa '''
if opcao:
print “Continuando”
else:
print “Você decidiu parar”
>>> continuar() #parâmetro é opcional
Continuando
>>> continuar(false)
Você decidiu parar
Orientação a Objetos
Tudo é objeto, da estrutura mais simples à mais complexa
Classes
class MinhaClasse(SuperClasse1):
''' Docstring qualquer '''
atributo1 = 'valor do atributo 1'
_atributo2 = 9
def __init__(self, atributo1, atributoS):
self.atributo1 = atributo1
SuperClasse1.__init__(atributoS)
def metodo1(self, *params):
pass
Orientação a objetos
Python possui herança múltipla
Todo método de classe recebe o parâmetro self
Atributos não públicos : _atributo2
Método __init__ é o primeiro a ser executado
__init__ não é um construtor
Orientação a objetos (cont.)
x = classe() #Instanciando...
y = classe2(param)
x.metodo1(param1, param2) #utilizando métodos
z = y.troca1(a, b)
var = x.atributo1 #utilizando atributo
y.atributo2 = 'Arara' #'setando' atributos
Programação funcional
filter(func, lista) retorna uma sequência com os itens da lista para os quais func é verdadeiro
def f(x): return x % 2 != 0 and x % 3 != 0
>>> filter(f, range(2, 25))
[5, 7, 11, 13, 17, 19, 23]
map(func, lista) aplica func(item) em cada item da lista retornando uma lista de valores retornados por func(item)
def f(x): return x*x*x
>>> map(f, range(1, 5))
[1, 8, 27, 64] # códigos extraídos de [1]
Programação funcional (cont.)reduce(func, lista) aplica sucessivamente func aos elementos de
lista dois a dois, retornando um único valor
def add(x, y): return x + y
>>> reduce(add, range(1, 11))
55
Funções lambda: cria funções anônimas simples
def incrementa(n)
return lambda x: x + n #somente uma
>>> f = incrementa(20) #expressão
>>> f(20)
40
Módulos
Importando Módulos
Para simplesmente importar o módulo:
>>> import modulo
Para importar tudo de um módulo
>>> from modulo import *
Para importar algo de um módulo
>>> from modulo import classe
>>> import modulo.class
Módulos da biblioteca padrãomath
>>> import math
>>> math.pi
3.1415926535897931
>>>math.cos(2*math.pi)
1.0
os
>>> import os
>>> os.getpid()
5411
>>> os.system('clear') #limpa a tela
Módulos da biblioteca padrão (cont.)
random
>>> import random
>>> random.choice(['pera', 'uva', 'maca'])
'uva'
>>> random.random()
0.81454527066344051
>>> random.randrange(10)
7
A função dir()
Retorna uma lista com todos os nomes contidos num módulo
>>> dir(math)
['__doc__', '__file__', '__name__', '__package__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'exp', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'hypot', 'isinf', 'isnan', 'ldexp', 'log', 'log10', 'log1p', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']
A função dir() (cont.)
Sem parâmetros, retorna os nomes gloabais atuais
>>>x = 2
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'x']
Outros Módulos
Interfaces gráficas
wxPython
TkInter
PyQt
PyGTK
Científico e numérico
numpy
scipy
ScientificPython
BioPython
Outros Módulos (cont.)Jogos
Pygame
Imagens
PyOpenGL
PyOgre
Soya 3D
Panda 3d
Web
Django
TurboGears
Zope
Programas que usam Python
YUM
Wicd
BitTorrent
ForecastWatch
Wing IDE
Blender (renderização de imagens)
OpenOffice
Scribus
Vim
GIMP
Inkscape
Poser
Jogos
Battlefield 2 (Windows)
Civilization IV (Windows)
Frequency (PS2)
Freedom Force (Windows, MacOSX)
Star Trek Bridge Commander (Windows)
Vegastrike (Multiplataforma)
Frets On Fire (Multiplataforma)
SnakeWorlds (Multiplataforma)
SolarWolf (Multiplataforma)
Frets On Fire
Civilization IV
The Gimp
Scribus
Mount & Blade
PySol
Inkscape
Poser
Solar Wolf
Snake Worlds
Referências
Rossum, Guido von, PythonTutorial– Release 2.4.2, 2005, Python Software Foundation
Rossum, Guido von, Python Tutorial – Release 2.6.1, 2009, Python Software Foundation - [1]
Rossum, Guido von, The Python Language Reference – Release 2.6.1, 2009, Python Software Foundation - [2]
Pilgrim, Mark, Dive Into Python – versão 5.4, 2004, diveintopython.org
Obrigado!!!
Recommended