Python Emsl2009

Post on 29-Jan-2018

1.061 views 0 download

Transcript of Python Emsl2009

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!!!