Python - inf.ufes.br · The Zen of Python Beautiful is better than ugly. Explicit is better than...
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/