Python - inf.ufes.br · The Zen of Python Beautiful is better than ugly. Explicit is better than...

of 134 /134
Python Linguagens de Programação Celso Ademar Celante Junior Marcos Aurélio Pereira Prado

Embed Size (px)

Transcript of Python - inf.ufes.br · The Zen of Python Beautiful is better than ugly. Explicit is better than...

  • PythonLinguagens de Programao

    Celso Ademar Celante JuniorMarcos Aurlio Pereira Prado

  • Sumrio Introduo Mini-tutorial Aspectos tericos Avaliao

  • Introduo Linguagem de alto nvel e propsito geral ltima verso: Python 3 Criada por Guido van Rossum e lanada em

    1991 The Zen of Python:

    Python prioriza redigibilidade, legibilidade e ortogonalidade

  • The Zen of PythonBeautiful is better than ugly.Explicit is better than implicit.Simple is better than complex.Complex is better than complicated.Flat is better than nested.Sparse is better than dense.Readability counts.Special cases aren't special enough to break the rules.Although practicality beats purity.Errors should never pass silently.Unless explicitly silenced.In the face of ambiguity, refuse the temptation to guess.There should be one-- and

    preferably only one --obvious way to do it.Although that way may not be obvious at first unless you're Dutch.Now is better than never.Although never is often better than *right* now.If the implementation is hard to explain, it's a bad idea.If the implementation is easy to explain, it may be a good idea.Namespaces are one honking great idea -- let's do more of those!

  • Executando um programa Para executar um script em Python, basta

    abrir o terminal e executar o comando:

    >>> python modulo.py

  • Por que utilizar Python? Hello, World

    #include

    int main(void) {printf(Hello,

    World\n);

    }

    #include

    int main() {std::cout

  • Sintaxe Comentrios:

    # comentrio simples

    comentrio multiline

  • Palavras Reservadas

    and as assert break class continue def del elif else except exec finally for from global if import in is lambda not or pass print raise

    return try while with yield

    So palavras reservadas em Python:

  • Tipagem, variveis Python uma linguagem dinamicamente tipada: no h

    declarao explcita de tipos de variveis Fortemente tipada: impede operaes entre tipos

    incompatveis Endentao obrigatria: define blocos e hierarquias Case-sensitive Restries sobre nomes de variveis: 1variavel, nome$

  • Definio de variveis

    a = 10 # a varivel amarrada ao tipo inteiro e recebe o valor 10

    c = a + 2 # c amarrada ao tipo inteiro e recebe a soma do valor de a com 2

    O tipo inferido automaticamente em tempo de interpretao

  • Sada padro

    a = 10

    print(a) # imprime o valor de a e quebra automaticamente a linha

    print(Isto um teste)

    Usa-se a funo print() para imprimir em terminal

  • Entrada padro

    algo = input(Digite algo: )

    numero = int(input(Digite um inteiro: )

    Usa-se a funo input() [raw_input em Python 2.*] para imprimir em terminal

  • Estruturas de repetio if while for goto: Python no suporta desvios

    incondicionais

  • If

    if expressao booleana:codigo se True

    elif expressao booleana:codigo se primeiro True e segundo False

    else:codigo se ambos forem False

    Estrutura de desvio condicional

  • If

    num = int(input(Digite um nmero: ))

    if num == 2:print(Dois!)

    elif num == 3:print(Trs!)

    else:print(No dois e nem trs!)

    Exemplo de estrutura de desvio condicional

  • For

    for iterator in iterable:codigo a ser executado

    Estrutura de iterao

  • For

    for iterator in iterable:codigo a ser executado

    Estrutura de iterao

    Note o uso da endentao nos exemplos acima e nos exemplos seguintes

  • For

    for x in range(0,3):print(O nmero : %d % (x))

    Exemplo de estrutura de iterao

  • For

    for x in range(0,3):print(O nmero : %d % (x))

    Exemplo de estrutura de iterao

    range() gera um intervalo entre nmeros, incluindo o primeiro e excluindo o ltimo

    0, 1 e 2

  • While

    while expressao booleana:codigo a ser executado

    Estrutura de repetio

  • While

    while expressao booleana:codigo a ser executado

    Estrutura de repetio

    Note que no se faz necessrio o uso de parenteses

  • While

    i = 0while i < 5:

    print(i)i += 1

    Exemplo de estrutura de repetio

  • Tipos de dados Em Python tudo objeto: funes, tipos

    primitivos, tipos compostos Funo type(objeto) Funo dir(objeto) Tipos mutveis x tipos imutveis:

    >> s = xyz>> s[0] = oTraceback (most recent call last):

    File , line 1, in TypeError: str object does not support item assignment

    >> n = 1>> id(n)

    >> n = n + 1>> id(n)

  • Tipos numricos int: inteiro simples, 4bytes (i = 1) float: real de ponto flutuante (f = 3.14) long: dimenso arbitrria (l = 51924361L) complex: nmeros complexos (c = 3.14j)

    Tipos numricos so imutveis

  • Tipos numricos Todos os tipos numricos suportam operaes de:

    Adio (+) Substrao (-) Multiplicao (*) Diviso (/): inteira se realizada entre inteiros. Real

    caso contrrio Resto da diviso (%) Potenciao (**) Diviso inteira (//): retorna inteiro imediatamente

    inferior

  • Tipos sequenciais string (str) tupla lista

    Strings e tuplas, como os tipos numricos, so imutveis, enquanto listas so mutveis.

  • Strings possvel definir uma string utilizando aspas duplas ou simples em uma nica linha, ou em vrias linhas com uma sequncia de trs aspas, duplas ou simples. So Unicode.

    Operaes com strings: Concatenao Interpolao Repetio Fatiamento Pertinncia

    >>> s = string>>> s = Uma + s>>> print Interpolando %s de tamanho %d % (s, len(s))>>> s = 2*s>>> u = uOi / # Unicode>>> print s[0:]>>> print s[3:10]>>> o in s>>> for letra in s:>>> print letra

  • Listas Listas em Python so heterogneas Tm suporte a fatiamento Podem ser concatenadas So iterveis Vasto conjunto de mtodos para manipulao:

    append(), remove(), sort(), reverse(), etc

    >>> uma_lista = [a, 2, [1]]>>> uma_lista[0]a>>> uma_lista.append(b)>>> uma_lista[0] = A>>> uma_lista[0:2]

  • Tuplas

    >>> uma_tupla= (a, 2, [1])>>> uma_tupla[0]a>>> uma_tupla.append(b)>>> uma_tupla[0] = A>>> uma_tupla[0:2]

    Tuplas, bem como listas, so heterogneas Tm suporte a fatiamento Podem ser concatenadas So iterveis Contudo, diferentemente de listas, tuplas so imutveis

  • Tuplas Tuplas, bem como listas, so heterogneas Tm suporte a fatiamento Podem ser concatenadas So iterveis Contudo, diferentemente de listas, tuplas so imutveis>>> uma_tupla= (a, 2, [1])>>> uma_tupla[0]a>>> uma_tupla.append(b)>>> uma_tupla[0] = A>>> uma_tupla[0:2]

    No existe mtodo append para tuplas

  • Tuplas Tuplas, bem como listas, so heterogneas Tm suporte a fatiamento Podem ser concatenadas So iterveis Contudo, diferentemente de listas, tuplas so imutveis>>> uma_tupla= (a, 2, [1])>>> uma_tupla[0]a>>> uma_tupla.append(b)>>> uma_tupla[0] = A>>> uma_tupla[0:2]

    TypeError: object doesnt support item assignment

    No existe mtodo append para tuplas

  • Dicionrios Um dicionrio em Python um mapeamento entre

    pares de valores. Lista de chaves e valores correspondentes Chaves s podem ser de tipos imutveis (tipos

    numricos, strings, tuplas) J valores associados podem ser tanto mutveis

    quanto imutveis Dicionrios so mutveis (pode-se trocar o valor

    associado a uma determinada chave)

  • DicionriosO acesso a itens do dicionrio feito utilizando colchetes (como em tuplas e listas) e as chaves do dicionrio:

    >>> d1 = {a: 1, b: 2, c: 3}>>> d1[a]1>>> d2= {1: (aluno, matricula), 2: (curso, departamento)}>>> d2[2](curso,departamento)>>> d1[1]Traceback (most recent call last):

    File , line 1, in KeyError: 1>>>

  • Tipo booleano

    Valores booleanos: True, False O tipo booleano uma especializao do tipo inteiro.

    Assim, True equivale a 1, e False a 0 So considerados False qualquer estrutura de dado

    vazia: (), [], {},

  • Arquivos: I/O

    A varivel arquivo faz referncia a um objeto arquivo

    arquivo = open(nome do arquivo, modo de leitura)

  • Arquivos: I/O Modos: r, w, a, r+, b (rb, wb, r+b) Mtodos:

    read() readline() write(conteudo) writelines(lista de strings) close()

    possvel iterar sobre o objeto arquivo utilizando um for

  • Implementao da Linguagem

    Implementao padro hibrida Cdigo compilado para bytecode (.pyc, .

    pyo), interpretado e executado pela mquina virtual Python

    A mquina virtual Python baseada em pilha Bytecode multiplataforma e armazenado em

    disco

  • Implementao da Linguagem

    cdigo.py

    CPython compila

    bytecode (.pyc, .pyo)

    Traduo do bytecode para linguagem de mquina em

    tempo de execuo

    cdigo em linguagem de

    mquina

    Amarraes que no foram feitas em tempo de projeto de LP so feitas em tempo de execuo

  • Memria e coletor de lixo Python no oferece o uso de ponteiros O acesso direto a memria possvel apenas usando o

    mdulo ctypes Contudo no recomendado em programao

    Python pura Usa-se o mdulo ctypes quando necessrio

    integrar o cdigo Python com alguma aplicao em linguagem C

  • Memria e coletor de lixo O modo como Python gerencia o lixo em memria

    depende da implementao CPython utiliza contagem de referncias : O coletor

    de lixo mantm um registro de referncias a cada objeto. Quando a quantidade de referncias chega a zero, o objeto destrudo

    Mdulo gc: funes para controle do coletor: forar coleta, modificar parmetros e obter

    estatsticas de debugging

  • Paradigma OO Tudo em Python objeto: o paradigma orientado a

    objetos est embutido na linguagem desde os tipos de dados mais bsicos

    Classes so definidas utilizando a palavra chave class Todas as classes em Python herdam de object Python permite herana simples e mltipla e sobrescrita

    de mtodos Suporta aliasing: diferentes nomes para mesmo objeto

    (no se aplica a tipos primitivos)

  • Classes: definio Classes so definidas utilizando a palavra chave class

    class NomeDaClasse:

    ...

    class MinhaClasse:i = 12345def f(self):

    return hello world

    x = MinhaClasse()

    class UmaClasse:s = abcdef __init__(self,at1,at2):

    self.data = []self.data.append(at1)

    def f(self):return self.data

    x = UmaClasse(LP, 2015)

  • Classes: definio Classes so definidas utilizando a palavra chave class

    class NomeDaClasse:

    ...

    class MinhaClasse:i = 12345def f(self):

    return hello world

    x = MinhaClasse()

    class UmaClasse:s = abcdef __init__(self,at1,at2):

    self.data = []self.data.append(at1)

    def f(self):return self.data

    x = UmaClasse(LP, 2015)

    Mtodo especial __init__() chamado

  • Classes: definio Classes so definidas utilizando a palavra chave class

    class NomeDaClasse:

    ...

    class MinhaClasse:i = 12345def f(self):

    return hello world

    x = MinhaClasse()

    class UmaClasse:s = abcdef __init__(self,at1,at2):

    self.data = []self.data.append(at1)

    def f(self):return self.data

    x = UmaClasse(LP, 2015)

    Mtodo especial __init__() chamado

    Atributo esttico declasse: compartilhado com todos os objetos da classe

  • Classes Atributos ou mtodos privados no existem em Python

    Existe uma conveno de usar __ (dois underscores) para sinalizar que o atributo ou objeto no deve ser acessado fora da classe

    considerado boa prtica fazer comentrios sobre a classe logo na primeira linha da definio. Estes podem ser acessados pelo atributo __doc___:

    class MinhaClasse:Documentao da minha classe

    >>> x = MinhaClasse()>>> x.__doc__Documentao da minha classe

  • Paradigma funcional Python d suporte

    parcial a paradigma funcional

    Uso de compreenso de listas e objetos iterveis

    >>> L = [1,2,3]>>> it = iter(L)>>> it.next()1

    for num in Lprint num

    >>> palavras = Uma frase em portugues.split()>>> l = [[p.upper(),p.lower(),len(p)] for p in palavras]>>> for i in l

    print i

  • Paradigma procedural Python naturalmente suporta programas

    inteiramente procedurais, ainda que funes tambm sejam objetos na linguagem

    O programador pode se abster de usar os mecanismos de OO e programar de modo semelhante a programas em C, por exemplo

  • Funes Declaradas utilizando a palavra chave def Todas as funes retornam algum valor

    Caso no tenha valor definido pelo programador, retorna None

    Aceita parmetros default e lista de parmetros de tamanho variado

    Aceita docstrings

  • Funes: parmetros Parmetros:

    default com nome

    Passagem: cpia para tipos

    imutveis referncia para

    mutveis e objetos de classes

    def f(nome,saudacao=Ola, ,pontuacao=!!!):Docstring dafuno freturn saudacao+nome+pontuacao

    >>> f(Joao,Oi)Oi Joao!!!

    >>> f(saudacao=Oi,,pontuacao=...,nome= Maria)Oi,Maria...

    >>> f(pontuacao=...,nome= Jose)Ola, Jose...

  • Funes: parmetrosdef f(saudacao,*nomes):

    Docstring dafuno fs=saudacaofor nome in nomes:

    s += , +nomereturn s+!

    >>> f(Ola,Joao,Maria,Jose)Ola, Joao, Maria, Jose!

    Parmetros: lista de tamanho

    variado Passagem:

    cpia para tipos imutveis

    referncia para mutveis e objetos de classes

  • Escopo de nomes Mantido atravs de namespaces:

    Estes so mapeamentos de nomes para objetos Namespaces so implementados na maioria das vezes

    como dicionrios Funes locals() e globals(): so dicionrios atualizados

    em tempo de execuo Escopo local consultado antes do escopo global:

    ofuscamento de varivel

  • Escopo de nomes: ofuscamento

    Variveis globais podem ser ofuscadas por variveis locais

    Para evitar ofuscamento deve-se declarar a varivel de mesmo nome como global no escopo local

    Mdulo

    var 1

    var 2

    Funo

    var 2

    var 3

    Variveis globais

    Variveis locais

  • Escopo de nomes: ofuscamentodef somalistas(lista):

    global somafor item in lista:

    if type(item) is list:somalistas(item)

    else:soma += item

    soma = 0 somalistas([[1,2,10],6,[4,5]])

    print soma # 28

  • Escopo de nomes: ofuscamentodef somalistas(lista):

    global somafor item in lista:

    if type(item) is list:somalistas(item)

    else:soma += item

    soma = 0 somalistas([[1,2,10],6,[4,5]])

    print soma # 28

    Impede ofuscamento

  • Mdulos Qualquer arquivo de cdigo fonte em Python um

    mdulo Podem ser importados em outros mdulos, utilizando a

    palavra chave import Python d suporte:

    importao completa do mdulo (import modulo) importao relativa (from arq import x, y) apelidos para mdulos (from arq import x as z)

  • Mdulos: importaoif fibbonaci.__name__ == __main__:

    mensagem = programa principal

    def fib1(n):a, b = 0, 1while b < n:

    print b,a, b = b, a+b

    def fib2(n):resultado = []a, b = 0, 1while b < n:

    resultado.append(b)a, b = b, a+b

    return resultado

    >>> import fibbonaci>>> fibbonaci.fib1(10)1 1 2 3 5 8

    >>> from fibbonaci import fib1, fib2>>> fib2(10)[1, 1, 2, 3, 5, 8]

    >>> import fibbonaci as fibo>>> fibo.fib1(10)1 1 2 3 5 8

  • Excees Excees so classes Excees, exceto as do sistema, estendem

    a classe Exception Um procedimento no precisa sinalizar que

    pode lanar excees (diferente de Java) Toda exceo causa encerramento do

    programa

  • Excees: captura Captura excees lanadas

    pelo cdigo do block try Pode-se capturar mais

    informaes da exceo usando as varivel

    O else opcional e s pode ocorrer depois de todos os excepts

    Else til para informar que nenhuma exceo ocorreu

    try:# cdigo que pode lanar excees

    except ValueError:# tratamento de ValueError

    except IOError as e:# tratamento de IoError

    except:# captura qualquer outra exceo

    else:# quando nenhuma exceo lanada

  • Excees: lanamentoPara lanar uma excepo, basta usar raise

    dfdsfd

    class MyException(Exception): Classe teste de excees def __init__(self, value):

    self.value = value...

    raise MyException...

    raise ValueError

  • Excees: finally Executado logo aps o bloco

    try Exceo lanada mas no

    capturada ser executada logo aps o finally ocorrer depois de todos os excepts

    try:# cdigo que pode lanar excees

    except ValueError:# tratamento de ValueError

    except:# captura qualquer outra exceo

    else:# quando nenhuma exceo lanada

    finally:# cdigo sempre executado

  • Polimorfismo Ad-hoc:

    Coero: Feita implicitamente pelo interpretador Python

    Sobrecarga: de subprogramas: no suportada pela linguagem de operadores: Python permite sobrecarga de

    operadores para classes definidas pelo programador: o programador deve implementar mtodos pr-definidos na classe

  • Polimorfismo: sobrecargaclass Tempo():

    __unidades = {h: 60, m: 1, s: 1/60}

    def __init__(self,t,u):self.tempo = tself.unidade = u

    def converteMin(self):return self.tempo * Tempo.__unidades[self.unidade]

    def __add__(self,other):return self.converteMin() + other.converteMin()

  • Polimorfismo: sobrecargaclass Tempo():

    __unidades = {h: 60, m: 1, s: 1/60}

    def __init__(self,t,u):self.tempo = tself.unidade = u

    def converteMin(self):return self.tempo * Tempo.__unidades[self.unidade]

    def __add__(self,other):return self.converteMin() + other.converteMin()

    Sobrecarga do operador binrio

    +

  • Polimorfismo: sobrecarga>>> x = Tempo(2,h)>>> y = Tempo(60,m)>>> x+y180>>> z = Tempo(60,s)>>> x+y+z181

  • Polimorfismo Universal

    Parmetrico: embutido na linguagem Qualquer objeto pode ser passado como

    parmetro para a funo ou classe Uma exceo lanada caso a implementao

    do subprograma tente acessar atributos ou mtodos que no pertencem ao objeto passado como parmetro

  • Polimorfismo Universal

    Incluso: caracterstico da linguagem, por dar suporte a orientao a objetos Python suporta herana simples e mltipla de

    classes

  • Polimorfismo: herana simplesclass Pessoa():

    def __init__(self,n):self.nome = n

    class Aluno(Pessoa):def __init__(self,n,e=):

    self.escola = ePessoa.__init__(self,n)

    class Professor(Pessoa):def __init__(self,n,e,f):

    self.escola = eself.formacao = fPessoa.__init__(self,n)

  • Polimorfismo: herana mltiplaclass Azul():

    cor = azulnivel = 1tom = marinhodef ehAzul(self):

    return True

    class Verde():cor = verdenivel = 2def ehAzul(self):

    return False

    class Teste():def printcor(self):

    print self.corprint self.nivelprint self.tom

    class TesteCor(Teste, Verde, Azul):def ehAzul(self):

    return Nunca!

  • Polimorfismo: herana mltiplaclass Azul():

    cor = azulnivel = 1tom = marinhodef ehAzul(self):

    return True

    class Verde():cor = verdenivel = 2def ehAzul(self):

    return False

    class Teste():def printcor(self):

    print self.corprint self.nivelprint self.tom

    class TesteCor(Teste, Verde, Azul):def ehAzul(self):

    return Nunca!

    Ordem importa!

  • Polimorfismo: herana mltipla>>> c = TesteCor()>>> c.printcor()O que

    acontece?

  • Polimorfismo: herana mltipla>>> c = TesteCor()>>> c.printcor()verde2marinho

    TesteCor herdou cor e nivel da classe Verde

  • Polimorfismo: herana mltipla>>> c = TesteCor()>>> c.printcor()verde2marinho

    >>> print c.ehAzul()False, Trueou Nunca!?

  • Polimorfismo: herana mltipla>>> c = TesteCor()>>> c.printcor()verde2marinho

    >>> print c.ehAzul()Nunca!

    O mtodo ehAzul sobrescrito pela classe TesteCor.Mesmo se no fosse, ehAzul() seria False, pois TesteCor herdaprimeiro da classe Verde, que sobrescreve o mtodo ehAzul da classe Azul

  • Concorrncia Suporte pela biblioteca padro

    programao com threads Oferece tambm, por padro, ferramentas

    de sincronizao como semforos, monitores etc.

  • Concorrncia: threads Basta criar uma classe que estenda classe

    Thread do pacote/mdulo threading Implementar o mtodo run(), onde fica o

    cdigo a ser executado pela thread Inicia-se a thread chamando o mtodo

    start() de uma instncia

  • Concorrncia: threads# tarefa.py

    from threading import Thread

    class Tarefa(Thread):

    def run(self):# cdigo a ser executado pela threadi = 0while i < 5:

    print(i)i += 1

    tarefa1 = Tarefa()tarefa1.start()

  • Concorrncia: threads>> python tarefa.py01234

  • Concorrncia: semforos Basta criar um objeto da classe Semaphore,

    do mdulo threading Se nenhum argumento for passado, o

    semforo iniciado com valor 1 Usa-se o mtodo acquire() como o P

    (testa/down) e release() como o V (up)

  • Concorrncia: semforosfrom threading import Semaphore

    semaforo = Semaphore() # cria-se o semforo com valor 1

    ...

    semaforo.acquire()

    # cdigo a ser protegido

    semaforo.release()

    ...

  • Concorrncia: monitores Basta criar um objeto da classe Lock, do

    mdulo threading Usa-se o objeto da classe Lock junto com a

    a palavra reservada with

  • Concorrncia: monitoresfrom threading import Lock

    lock = Lock()

    with lock:# cdigo a ser protegido

  • Persistncia de dados Python oferece, por padro, algumas formas

    de persistncia de dados Serializao: permite serializar dados em JSON ou

    em formato Pickle Bancos de dados: APIs de integrao a sistemas de

    bancos de dados (suporte a SQLite por padro)

  • Serializao Suporta a serializao de objetos de

    qualquer classe atravs do mdulo Pickleimport picklel1 = Livro("Ensaio sobre a Cegueira", 50)arq1 = open("serial","w") # arquivo em modo escritaarq2 = open("serial","r+") # arquivo em modo leitura

    pickle.dump(l1,arq1)l1 = None

    l1 = pickle.load(arq2)

  • LPs: propriedades desejveis Legibilidade Redigibilidade Confiabilidade Eficincia Facilidade de aprendizado Modificabilidade Reusabilidade Portabilidade

  • LPs: propriedades desejveis Legibilidade Redigibilidade Confiabilidade Eficincia Facilidade de aprendizado Modificabilidade Reusabilidade Portabilidade

  • Legibilidade Sintaxe clara e concisa. Legibilidade prioridade Demarcadores de blocos: no so necessrios

    Usa-se endentao Python no possui desvios incondicionais (goto):

    evita cdigo macarrnico Caracteres especiais (@, $, &, etc):

    no possuem significado especial na linguagem (diferente de C, por exemplo)

    Mais intuitivo: uso das palavras and, in, or, etc

  • Legibilidade Python multiparadigma: possui suporte a paradigma

    funcional, procedural e OO isso permite vrias maneiras diferentes de se fazer

    uma nica programao acaba possibilitando criao de cdigo com baixa

    legibilidade (a partir da mistura de paradigmas)

  • LPs: propriedades desejveis Legibilidade Redigibilidade Confiabilidade Eficincia Facilidade de aprendizado Modificabilidade Reusabilidade Portabilidade

  • Redigibilidade Altamente redigvel Python possui tipagem dinmica:

    ajuda na escrita rpida de programas Possui tratamento de excees:

    evita ter que tratar casos especiais no meio do cdigo

    No possui mecanismo de operaes com ponteiros: isso evita problemas de conflito com legibilidade de

    cdigo

  • Redigibilidade No h a necessidade de usar parnteses em

    estruturas de controle de fluxo (if, while, for) Compreenso de listas:

    recurso que permite criao de listas com poucas linhas de cdigo

    altamente ligado ao paradigma funcional porm pode trazer prejuzos para a legibilidade do

    cdigo

  • LPs: propriedades desejveis Legibilidade Redigibilidade Confiabilidade Eficincia Facilidade de aprendizado Modificabilidade Reusabilidade Portabilidade

  • Confiabilidade Possui mecanismo para tratamento de

    excees No permite aritmtica de ponteiros Apesar de dinamicamente tipada,

    fortemente tipada (no permite operaes entre tipos incompatveis)

    Coletor de lixo da memria

  • Confiabilidade Nas verses 2.* (amplamente usadas)

    possvel mudar os valores de True e False possvel fazer False = True, por exemplo

  • LPs: propriedades desejveis Legibilidade Redigibilidade Confiabilidade Eficincia Facilidade de aprendizado Modificabilidade Reusabilidade Portabilidade

  • Eficincia Verificao dinmica de tipos Controle de ndice de vetor Por padro, sua implementao hbrida

  • LPs: propriedades desejveis Legibilidade Redigibilidade Confiabilidade Eficincia Facilidade de aprendizado Modificabilidade Reusabilidade Portabilidade

  • Facilidade de aprendizado Minimimalista: poucas palavras reservadas

    e nmero reduzido de instrues bsicas Ortogonal: menor nmero possvel de

    excees regras Vasta biblioteca padro, assim como Java, o

    que permite que um programador iniciante faa muitas coisas

  • LPs: propriedades desejveis Legibilidade Redigibilidade Confiabilidade Eficincia Facilidade de aprendizado Modificabilidade Reusabilidade Portabilidade

  • Modificabilidade Python no possui constantes. Pode-se

    encapsular um dado em uma funo e retorn-lo sempre que possvel

  • LPs: propriedades desejveis Legibilidade Redigibilidade Confiabilidade Eficincia Facilidade de aprendizado Modificabilidade Reusabilidade Portabilidade

  • Reusabilidade A linguagem encoraja a programao por

    orientao a objetos Facilita a criao de mdulos/bibliotecas que

    podem ser facilmente distribudos Frameworks de terceiros (Django e Flask,

    por exemplo)

  • LPs: propriedades desejveis Legibilidade Redigibilidade Confiabilidade Eficincia Facilidade de aprendizado Modificabilidade Reusabilidade Portabilidade

  • Portabilidade Implementao mais usada feita em ANSI

    C (CPython) e permite extenses escritas em C e C++

    open source e permite implementaes em outras plataformas Ex.: Jython, interpretador Python em Java. Gera

    bytecodes compatveis com a JVM

  • Avaliao da Linguagem Critrios gerais:

    Aplicabilidade Confiabilidade Facilidade de Aprendizado Eficincia Portabilidade Suporte ao mtodo de projeto Evolutibilidade Reusabilidade Integrao com outros softwares Custo

  • Avaliao da Linguagem Critrios especficos:

    Escopo Expresses e comandos Tipos primitivos e compostos Gerenciamento de memria Persistncia de dados Passagem de parmetros Encapsulamento e proteo Sistema de tipos Verificao de tipos Polimorfismo Excees Concorrncia

  • Avaliao da LinguagemCritrios gerais C Java Python

    Aplicabilidade Sim Parcial Sim

    Confiabilidade No Sim Sim

    Aprendizado No No Sim

    Eficincia Sim Parcial Sim

  • Avaliao da LinguagemCritrios gerais C Java Python

    Aplicabilidade Sim Parcial Sim

    Confiabilidade No Sim Sim

    Aprendizado No No Sim

    Eficincia Sim Parcial Sim

    Python uma linguagem de propsito geral, assim como C. Apesar de no possuir mecanismos de controle de hardware (como Java), Python d opo do programador fazer uso de bibliotecas de funes para esse tipo de programao

  • Avaliao da LinguagemCritrios gerais C Java Python

    Aplicabilidade Sim Parcial Sim

    Confiabilidade No Sim Sim

    Aprendizado No No Sim

    Eficincia Sim Parcial Sim

    Python, como Java, possui mecanismo de tratamento de excees e funcionalidades que tiram do programador a responsabilidade de tratamento (coleta de lixo, verificao de ndice de vetor, etc). C deixa por conta do programador todos esses tratamentos, que, se falhos, acarretam em prejuzos diversos.

  • Avaliao da LinguagemCritrios gerais C Java Python

    Aplicabilidade Sim Parcial Sim

    Confiabilidade No Sim Sim

    Aprendizado No No Sim

    Eficincia Sim Parcial Sim

    C e Java so linguagens difceis de aprender: C d suporte a ponteiros enquanto que Java apresenta muitos conceitos, nem sempre ortogonais. Python, apesar de reunir grande parte dos conceitos de Java e dar suporte a paradigma funcional, uma linguagem de fcil assimilao por ser bastante legvel e concisa.

  • Avaliao da LinguagemCritrios gerais C Java Python

    Aplicabilidade Sim Parcial Sim

    Confiabilidade No Sim Sim

    Aprendizado No No Sim

    Eficincia Sim Parcial Parcial

    C permite controle mais refinado dos recursos da aplicao (hardware, por exemplo). Nesse aspecto Python semelhante a Java: as duas linguagens adicionam mecanismos de controle sobre recursos que acaba diminuindo a eficincia (verificao de tipos, coleta de lixo, etc)

  • Avaliao da LinguagemCritrios gerais C Java Python

    Portabilidade No Sim Sim

    Mtodo de projeto

    Estruturado OO OO e Estruturado

    Evolutibilidade No Sim Sim

    Reusabilidade Sim Sim Sim

  • Avaliao da LinguagemCritrios gerais C Java Python

    Portabilidade No Sim Sim

    Mtodo de projeto

    Estruturado OO OO e Estruturado

    Evolutibilidade No Sim Sim

    Reusabilidade Sim Sim Sim

    C possui compiladores diferentes com caractersticas diferentes, gerando uma dependncia significativa. J Python e Java tem o intuito de ser multiplataforma: portabilidade um conceito central na linguagem

  • Avaliao da LinguagemCritrios gerais C Java Python

    Portabilidade No Sim Sim

    Mtodo de projeto

    Estruturado OO OO e Estruturado

    Evolutibilidade No Sim Sim

    Reusabilidade Sim Sim Sim

    Depende do paradigma escolhido para desenvolvimento do projeto. Python leva vantagem por oferecer suporte a ambos

  • Avaliao da LinguagemCritrios gerais C Java Python

    Portabilidade No Sim Sim

    Mtodo de projeto

    Estruturado OO OO e Estruturado

    Evolutibilidade No Sim Sim

    Reusabilidade Sim Sim Sim

    C possui diversos mecanismos que podem tornar o cdigo ilegvel e difcil de manter. J Python e Java estimulam o uso de documentao na construo de cdigo e do suporte ao paradigma OO, que tm evolutibilidade como ideia central

  • Avaliao da LinguagemCritrios gerais C Java Python

    Portabilidade No Sim Sim

    Mtodo de projeto

    Estruturado OO OO e Estruturado

    Evolutibilidade No Sim Sim

    Reusabilidade Parcial Sim Sim

    C s d suporte a reuso de funes. J Python e Java do suporte a classes e possuem mecanismos de pacotes (reuso de mdulos em Python). O polimorfismo universal tambm auxilia na reusabilidade do cdigo a medida que oferece mecanismos de herana e tipos genricos.

  • Avaliao da LinguagemCritrios gerais C Java Python

    Integrao Sim Parcial Sim

    Custo Depende da aplicao

    Depende da ferramenta

    Depende da ferramenta

  • Avaliao da LinguagemCritrios gerais C Java Python

    Integrao Sim Parcial Sim

    Custo Depende da aplicao

    Depende da ferramenta

    Depende da ferramenta

    C e Python do suporte a integrao com diversas LPs. J Java d suporte apenas a integrao com C/C++, necessitando de uso de uma ferramenta externa.

  • Avaliao da LinguagemCritrios gerais C Java Python

    Integrao Sim Parcial Sim

    Custo Depende da aplicao

    Depende da ferramenta

    Depende da ferramenta

    C e Python so de domio pblico e embora Java esteja sob propriedade da Oracle, esta distribui gratuitamente a linguagem. Este critrio depende essencialmente das escolhas da equipe que estar desenvolvendo o projeto.

  • Avaliao da LinguagemCritrios especficos

    C Java Python

    Escopo Sim Sim Sim

    Expresses e comandos

    Sim Sim Sim

    Tipos primitivos Sim Sim Sim

    Gerenciamento de memria

    Programador Sistema Sistema/Programador

  • Avaliao da LinguagemCritrios especficos

    C Java Python

    Escopo Sim Sim Sim

    Expresses e comandos

    Sim Sim Sim

    Tipos primitivos Sim Sim Sim

    Gerenciamento de memria

    Programador Sistema Sistema/Programador

    As trs linguagens requerem que o programador defina explicitamente suas entidades, associando-as a um determinado escopo de visibilidade.

  • Avaliao da LinguagemCritrios especficos

    C Java Python

    Escopo Sim Sim Sim

    Expresses e comandos

    Sim Sim Sim

    Tipos primitivos Sim Sim Sim

    Gerenciamento de memria

    Programador Sistema Sistema/Programador

    Todas as trs oferecem ampla variedade de expresses e comandos

  • Avaliao da LinguagemCritrios especficos

    C Java Python

    Escopo Sim Sim Sim

    Expresses e comandos

    Sim Sim Sim

    Tipos primitivos Sim Sim Sim

    Gerenciamento de memria

    Programador Sistema Sistema/Programador

    Todas oferecem tipos primitivos. Python e Java oferecem tipo booleano (em Python, uma especializao do tipo inteiro). Python ainda oferece mapeamentos como dicionrios e estruturas flexveis como listas heterogneas.

  • Avaliao da LinguagemCritrios especficos

    C Java Python

    Escopo Sim Sim Sim

    Expresses e comandos

    Sim Sim Sim

    Tipos primitivos Sim Sim Sim

    Gerenciamento de memria

    Programador Sistema Sistema/Programador

    C deixa a cargo do programador o gerenciamento da memria. Java utiliza coletor de lixo. Python usa um meio termo, pois ao mesmo tempo que utiliza coletor de lixo, tambm d ao programador certo controle sobre a coleta. Ainda assim o controle sobre o gerenciamento da memria no total como em C.

  • Avaliao da LinguagemCritrios especficos

    C Java Python

    Persistncia de dados

    Biblioteca de funes

    JDBC, biblioteca de classes, serializao

    biblioteca de classes, serializao

    Passagem de parmetros

    lista varivel e por valor

    lista varivel, por valor e por copia de referncia

    lista varivel, default, por valor e por cpia de referncia

    Encapsulamento e proteo

    Parcial Sim Sim

    Sistema de Tipos No Sim Sim

  • Avaliao da LinguagemCritrios especficos

    C Java Python

    Persistncia de dados

    Biblioteca de funes

    JDBC, biblioteca de classes, serializao

    biblioteca de classes, serializao

    Passagem de parmetros

    lista varivel e por valor

    lista varivel, por valor e por copia de referncia

    lista varivel, default, por valor e por cpia de referncia

    Encapsulamento e proteo

    Parcial Sim Sim

    Sistema de Tipos No Sim Sim

    C oferece bibliotecas de I/O, mas no possui interface para BD. Java e Python suportam serializao, possuem bibliotecas para entrada e sada de dados e possuem padres de interface para banco de dados (JDBC em Java, Sqlite e APIs em Python).

  • Avaliao da LinguagemCritrios especficos

    C Java Python

    Persistncia de dados

    Biblioteca de funes

    JDBC, biblioteca de classes, serializao

    biblioteca de classes, serializao

    Passagem de parmetros

    lista varivel e por valor

    lista varivel, por valor e por copia de referncia

    lista varivel, default, por valor e por cpia de referncia

    Encapsulamento e proteo

    Parcial Sim Sim

    Sistema de Tipos No Sim Sim

    C usa apenas passagem por valor. Java utiliza passagem por valor e por cpia de referncia. Em Python tipos mutveis so passados por cpia de referncia enquanto que tipos imutveis so passados por valor. Python tambm aceita parmetros default.

  • Avaliao da LinguagemCritrios especficos

    C Java Python

    Persistncia de dados

    Biblioteca de funes

    JDBC, biblioteca de classes, serializao

    biblioteca de classes, serializao

    Passagem de parmetros

    lista varivel e por valor

    lista varivel, por valor e por copia de referncia

    lista varivel, default, por valor e por cpia de referncia

    Encapsulamento e proteo

    Parcial Sim Sim

    Sistema de Tipos No Sim Sim

    C utiliza TADs para simular mecanismo de encapsulamento (separando interface de implementao em arquivos diferentes). Java e Python oferecem mecanismos de classes.

  • Avaliao da LinguagemCritrios especficos

    C Java Python

    Persistncia de dados

    Biblioteca de funes

    JDBC, biblioteca de classes, serializao

    biblioteca de classes, serializao

    Passagem de parmetros

    lista varivel e por valor

    lista varivel, por valor e por copia de referncia

    lista varivel, default, por valor e por cpia de referncia

    Encapsulamento e proteo

    Parcial Sim Sim

    Sistema de Tipos No Sim Sim

    C oferece mecanismos que permitem violao de sistema de tipos (coeres, aritmtica de ponteiros, etc). Java possui um sistema de tipos rigoroso. Python, apesar de permitir coeres impede operaes entre tipos incompatveis.

  • Avaliao da LinguagemCritrios especficos

    C Java Python

    Verificao de tipos

    Esttica Esttica/Dinmica Dinmica

    Polimorfismo Coero e sobrecarga

    Todos Todos

    Excees No Sim Sim

    Concorrncia No (biblioteca de funes)

    Sim Sim

  • Avaliao da LinguagemCritrios especficos

    C Java Python

    Verificao de tipos

    Esttica Esttica/Dinmica Dinmica

    Polimorfismo Coero e sobrecarga

    Todos Todos

    Excees No Sim Sim

    Concorrncia No (biblioteca de funes)

    Sim Sim

    C faz todas as verificaes estaticamente. Java faz algumas verificaes dinamicamente (checagem de ndice de vetor, etc). J Python s faz verificaes dinamicamente.

  • Avaliao da LinguagemCritrios especficos

    C Java Python

    Verificao de tipos

    Esttica Esttica/Dinmica Dinmica

    Polimorfismo Coero e sobrecarga

    Todos Todos

    Excees No Sim Sim

    Concorrncia No (biblioteca de funes)

    Sim Sim

    C no possui polimorfismo de incluso ou paramtrico. Java e Python possuem todos os tipos, porm Java, ao contrrio de Python, no permite sobrecarga de operadores.

  • Avaliao da LinguagemCritrios especficos

    C Java Python

    Verificao de tipos

    Esttica Esttica/Dinmica Dinmica

    Polimorfismo Coero e sobrecarga

    Todos Todos

    Excees No Sim Sim

    Concorrncia No (biblioteca de funes)

    Sim Sim

    C no suporta mecanismos de excees. O programador obrigado a misturar tratamento de erro com cdigo de fluxo normal de programao. Java e Python oferecem forte mecanismo de tratamento de excees.

  • Avaliao da LinguagemCritrios especficos

    C Java Python

    Verificao de tipos

    Esttica Esttica/Dinmica Dinmica

    Polimorfismo Coero e sobrecarga

    Todos Todos

    Excees No Sim Sim

    Concorrncia No (biblioteca de funes)

    Sim Sim

    C no possui suporte nativo a concorrncia. J Python e Java oferecem recursos nativos para excluso mtua (synchronized) e threads.

  • Referncias https://docs.python.org/ http://www.python-course.eu/ http://nbviewer.ipython.

    org/github/ricardoduarte/python-para-desenvolvedores/tree/master/

    https://docs.python.org/https://docs.python.org/http://www.python-course.eu/http://www.python-course.eu/http://nbviewer.ipython.org/github/ricardoduarte/python-para-desenvolvedores/tree/master/http://nbviewer.ipython.org/github/ricardoduarte/python-para-desenvolvedores/tree/master/http://nbviewer.ipython.org/github/ricardoduarte/python-para-desenvolvedores/tree/master/http://nbviewer.ipython.org/github/ricardoduarte/python-para-desenvolvedores/tree/master/