Python
Luan Ferreira Cardoso
Ricardo Solon Zalla
Trabalho para o curso de Linguagens de Programação do 9º período de Engenharia da Computação do IME
20 de maio de 2016
Sumário
1. Introdução
2. Python comparada à Java
3. O básico de Python
4. Variáveis e tipo de dados
5. Expressões e comandos
6. Modularização
7. Polimorfismo
8. Exceções
9. Concorre ̂ncia
Introdução
O que é Python?
● Criado em 1990 por Guido Van Rossum
● Sobre o Pytho original, Van Rossum escreveu em 1996:
“Seis anos atrás, em Dezembro de 1989, eu estava procurando um hobbie
de programação que me manteria ocupado durante a semana de Natal. Meu
escritório estaria fechado … No entanto, eu tinha um computador em casa e
não tanta coisa a mais assim pra fazer. Eu decidi escrever um interpretador
para uma nova linguagem de script que eu estava pensando ultimamente: uma
descendente do ABC que seria endereçada para Unix/C hackers. Eu escolhi
Python com o título do projeto, me pareceu um título com um humor
irreverente (e de um grande fã de Monty Python’s Flying Circus).
Trabalho sobre a linguagem Python
Python é uma linguagem de script?
● Geralmente pensada com uma mas é principalmente uma questão de marketing
○ As pessoas pensam que linguagens de script são mais fáceis de
aprender e utilizar
● No entanto Python é uma linguagem de programação bem trabalhada,
dinâmica e coerente podendo ser utilizada numa gama muito grande de
aplicações.
Filosofia de Design
The Zen of Python, por Tim Peters tradução livre
Bonito é melhor que feia.
Explícito é melhor que implícito.
Simples é melhor que complexo.
Complexo é melhor que complicado.
Linear é melhor aninhado.
Esparso é melhor que denso.
Legibilidade conta.
Casos especiais não são especiais o suficiente para quebrar regras
Embora praticabilidade seja melhor que pureza.
Erros nunca deverão passar em silêncio
A menos que explicitamente silenciados.
Caso ocorra ambiguidade, recuse a tentação de adivinhar.
Deveria existir um - e preferencialmente somente um - jeito óbvio de fazer.
Embora esse jeito possa ser não tão óbvio a menos que você seja Holandês.
Agora é melhor que nunca.
Embora nunca é melhor que exatamente agora.
Se a implementação é difícil de explicar, é uma má idéia.
Se a implementação é fácil de explicar, pode ser uma boa idéia.
Namespaces é uma grande ideia -- vamos fazer mais disso!
Na prática
Na prática
Por que Python?
● Design fácil de ser aprendido
○ Limpo
○ Muito poucas palavras chaves
● Altamente portátil
○ Roda quase em qualquer lugar - servidores e estações de trabalho
○ Utiliza byte-codes independente de máquina
● Extensível
○ Design pode ser extensível utilizando C/C++, permitindo acesso à
muitas bibliotecas externas
Características notórias
● Sintaxe limpa mais tipo de dados de alto nível
○ Isso leva a uma codificação rápida!
● Utiliza espaço em branco para delimitar blocos
○ Humanos geralmente fazem isso, por que não uma linguagem de
programação?
● Variáveis não necessitam de declaração
○ Muito embora não seja uma linguagem sem tipo.
Produtividade
● Tempo de desenvolvimento reduzido
○ tempo de codificação é de 2-10 vezes menor que C,C++, Java
● Manutenção de código melhorada
○ o código é extremamente legível
● Menor treinamento
○ linguagem é muito fácil de aprender
Para que ela é utilizada?
● rápida prototipação
● web script
● Aplicações científicas
● Linguagens de extensão
● Processamento XML
● Aplicações de banco de dados
● Aplicações de interface
Python comparada à Java
Python vs. Java
● Código é de 5-10 mais conciso
● Desenvolvimento muito mais rápido
○ Sem fase de compilação
○ Menos codificação
● Sim, ela roda mais devagar
○ No entanto, desenvolvimento é muito mais rápido!
● Utilize Python com Java: Jython!
Básico de Python
Programas em Python
● Programas em Python e módulos são escritos como arquivos texto com
tradicionalmente uma extensão .py
● Cada modulo Python tem o seu próprio namespace discreto
● Namespace dentro de um módulo Phyton é um namespace global
● Módulos Python e programas são diferenciados somente pelo jeito que eles
são chamados
○ arquivos .py executados diretamente são programas (geralmente
chamados scripts)
○ arquivos .py referenciados via declaração statement são módulos
● Portanto, o mesmo arquivo .py pode ser um programa/script ou um módulo
Python - Conceitos
● Python é uma linguagem
○ Interpretada
○ Multiparadigmas: orientadas a objeto, imperativa, funcional e
procedural
○ Fortemente tipada
○ Dinamicamente tipada
Váriaveis e Tipos
Váriaveis e Tipos
● Variáveis não precisam de declaração
○ >>> a=1
○ >>>
● Como uma atribuição de valor é uma declaração não há resultado impresso
na tela
○ >>>a
○ 1
● Um nome de variável sozinha é uma expressão. Portanto o resultado é
impresso na tela
Váriaveis e Tipos
● Variáveis devem ser criadas antes delas serem usadas
○ >>> b
○ Traceback (innermost last):
○ File “<interactive input>”, line
○ 1, in?
○ NameEroor: b
○ >>>
● Objetos sempre tem um tipo
○ >>>a=1
○ >>>type(a)
○ <type ‘int’>
○ >>> a=”Luan”
○ type(a)
○ <type ‘string’>
Tarefas vs Testes de Igualdade
● Tarefas são executadas com um simples =
● Testes de igualdade são realizados com um duplo = (==)
○ Promoções sensíveis de tipo são definidos
○ Testes de identidade com o operador is
● >>> 1==1
● 1
● >>> 1.0==1
● 1
● >>> “1”==1
● 0
Tipos de Dados
Tipos de Dados
● Strings
○ Pode incluir qualquer tipo de dado, incluindo NULLs embutidos
○ Declarado incluindo single, double ou triple aspas
○ >>> s = “Hi there”
○ >>> s
○ ‘Hi there’
○ >>> s = “Embedded ‘quote’”
○ >>>s
○ “Embedded ‘quote’”
Tipos de Dados
● Aspas triplas úteis para strings multilinhas
○ >>> s = “““ uma string
○ … muito longa com “aspas” ou
○ qualquer outra coisa“““
○ >>> s
○ ‘uma string muito longa com “aspas” ou qualquer outra coisa’
○ >>> len(s)
○ 45
Tipos de Dados
● Inteiros implementados utilizando long C
○ Como C, divisão de inteiros retornam o floor
○ >>> 5/2
○ 2
● Tipos Floats implementados utilizando doubles C
Tipos de Dados
● Tipos de Dados de alto nível
○ Pode conter qualquer objeto
○ Declarado utilizando colchetes
○ >>> 1= []# An empty list
○ >>> l.append(1)
○ >>> l.append(“Hi there”)
○ >>> len(l)
○ 2
○ >>>l
○ [1, ‘Hi there’]
Listas e Strings
● Classes de sequências built-in
○ Fatiamento e ordenação
[begin : end : ordem]
>>> lista = [1, 'python', 4.3]
>>> lista[:2]
[1, 'python']
>>> lista[::-1]
[4.3, 'python', 1]
>>> len(lista)
>>> 3
>>> s = ‘551 arof’
>>> s[::-1]
>>> 155 fora
Tipos de Dados
● Tuplas são similares à listas
○ Sequencia de itens
○ A diferença chave é que são imutáveis
○ Frequentemente utilizado no lugar de estruturas simples
○ point = 2,3
○ >>> x,y = point
○ >>> x
○ 2
● Tuplas são particularmente utilizadas para retornar múltiplos valores de
uma função
○ >>> x,y = GetPoint()
Tipos de Dados
● Dicionários aceitam chave - par de valores
○ Frequentemente chamados maps ou hashes. Implementados utilizando
hash - tables
○ Chaves podem ser objetos imutáveis, valores podem ser qualquer
objeto
○ Declarados utilizando colchetes
○ >>> d={}
○ >>> d[0]= “ Olá ”
○ >>> d[“foo”] = 1
○ >>> len(d)
○ 2
○ >>> d[0]
○ ‘ Olá ‘
Expressões e Comandos
Expressões e Comandos
● Expressões
○ Instruções que o interpretador python executa
Atribuição não produz saída
>>> my_list = [‘LP’, 3, 3.14]
>>> print my_list
[‘LP’, 3, 3.14]
>>> print my_list[1]+my_list[2]
6.14
>>> 5892719 % 417
92
● Precedência de operadores
○ Acrônimo PEMDAS
● Expressões em curto circuito
○ Operadores and, or
○ Resultado: Booleano
Modularização
Modularização
Não força a pensar em objetos mas
→ Todos os tipos são derivados de Object(): 3 é instância de int()
→ Todos os tipos são classes
Passagem de parâmetros
→ Somente por referência (sem necessidade de operadores)
TADs
→ Suporte a encapsulamento
Variáveis privadas
- Não existe modificador de acesso protected/private
- Convenção: Prefixo _ parte não pública
- Prefixo __ #__spam -> _nomeclasse__spam
→ Suporte a polimorfismo
Compilação separada
→ Não é compilado em etapa separada antes da execução
→ Compilação “on-the-fly”, código de bytes independente da plataforma
Modularização
Suporte a módulos
● fibonacci.py
○ Importar do shell
>>> import fibonacci
>>> fibonacci.fib_rec(30)
832040
○ >>> from fibonacci import fib_rec, fib_ite
>>> fib_rec(30)
832040
○ >>> from fibonacci import * as f
● Atribuição de nome local
○ >>> rec = fibonacci.fib_rec
Polimorfismo
Polimorfismo
● Oveload
○ Operadores
__add__, __mult__, …
def __add__(self, c):
return Complex(self.real + c.real, self.imag + c.imag)
>>> c+d*e
● Override
○ Classes derivadas podem sobrescrever classe base
→ Referenciar base (super) para chamar método dela
>>> class A(object):
... def who_is(self):
... print 'A'
>>> class B(A):
... def who_is(self):
... print 'B' ...
>>> x = B()
>>> x.who_is() # chama método da classe B
>>> super(B, x).who_is() # chama método da classe A
Polimorfismo
● -Herança
○ Sem modificadores de acesso
○ Herança múltipla
class NomeClasseDerivada(Base1, Base2, Base3):
● -Classe abstrata
○ Módulo Abstract Base Class (ABC)
__metaclass__ = ABCMeta #atributo
@abstractmethod #método
● Metaclasses
○ Derivadas de type
Instanciar classes: atributo # __metaclass__ = metaclasse
class Pessoa:
def __init__(self, nome ='', idade=0):
self.nome = nome
self.idade = idade
def getIdade(self):
return self.idade
class PessoaFisica(Pessoa):
def __init__(self, CPF, nome='', idade=0):
Pessoa.__init__(self, nome, idade)
self.CPF = CPF
class PessoaJuridica(Pessoa):
def __init__(self, CNPJ, nome='', idade=0):
Pessoa.__init__(self, nome, idade)
self.CNPJ = CNPJ
Polimorfismo
Polimorfismo
a = Pessoa()
Pessoa.__init__(a, 'Leonardo', 22)
b = PessoaFisica('122.333.332-1', nome='', idade=0)
banco = PessoaJuridica('00.000.000/0001-11', nome='Banco do Brasil', idade=435)
print a.nome # imprime Leonardo
print a.idade # imprime 22
print b.CPF # imprime 122.333.332-1
print banco.CNPJ # imprime 00.000.000/0001-11
Exceções
Exceções
1. Erros de sintaxe
2. Exceções
- Sintaticamente correto
- Erro na execução
Built-in Exceptions
>>> 10 * (1/0)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
ZeroDivisionError: integer division or modulo by zero
>>> '2' + 2
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: cannot concatenate 'str' and 'int' objects
Handling Exceptions
>>> while True:
... try:
... x = int(raw_input("Please enter a number: "))
... break
... except ValueError:
... print "Oops! That was no valid number. Try again..."
User-defined Exceptions
● Criar classes derivadas de Exception()
○ MinhaException(Exception) { … }
class Error(Exception):
"""Base class for exceptions in this module."""
pass
class Ex1(Error):
"""Base class for exception 1 in this module."""
pass
class Ex2(Error):
"""Base class for exception 2 in this module."""
pass
User-defined Exceptions
>>> class MyError(Exception):
... def __init__(self, value):
... self.value = value
... def __str__(self):
... return repr(self.value)
...
>>> try:
... raise MyError(2*2)
... except MyError as e:
... print 'My exception occurred, value:', e.value
...
My exception occurred, value: 4
>>> raise MyError('oops!')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
__main__.MyError: 'oops!'
Clean-up Actions
finally
○ Clause do try que será executada em qualquer circunstância
○ Exceções não tratadas serão lançadas após o finally
Clean-up Actions
>>> def divide(x, y):
... try:
... result = x / y
... except ZeroDivisionError:
... print "division by zero!"
... else:
... print "result is", result
... finally:
... print "executing finally clause"
...
>>> divide(2, 1)
result is 2
executing finally clause
>>> divide(2, 0)
division by zero!
executing finally clause
>>> divide("2", "1")
executing finally clause
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "<stdin>", line 3, in divide
TypeError: unsupported operand type(s) for /: 'str' and 'str'
Concorrência
Concorrência
● Módulos built-in
○ _thread: baixo nível, light-weight tasks
○ threading: alto nível, mais complexa
Controlar multiplas threads:
thread.start_new_thread(function, args[,kwargs])
Sincronização:
lock, Semaphore
-
Conclusão

Mais conteúdo relacionado

PPTX
Trabalho de Paradigmas Da Linguagem De Programação - Python
PDF
Python - Introdução
PDF
PDF
Linguagem de Programação Python
PPTX
Aula 5 - Sinusite / faringite e amigdalite
PPTX
Estrutura de dados em Java - Filas
DOCX
Trabalho linguagem python
PDF
Análise de Algoritmos - As classes P e NP
Trabalho de Paradigmas Da Linguagem De Programação - Python
Python - Introdução
Linguagem de Programação Python
Aula 5 - Sinusite / faringite e amigdalite
Estrutura de dados em Java - Filas
Trabalho linguagem python
Análise de Algoritmos - As classes P e NP

Mais procurados (20)

ODP
Aula: Tipos de Interface
PDF
Python: a primeira mordida
PPTX
Introdução à programação
PPTX
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
PDF
Análise de Algoritmos - Análise Assintótica
PPTX
Formation python
PPTX
Introdução a python
PDF
Programando com Python
PPTX
Parotidite Epidémica
PDF
Say What You Mean A Mindful Approach to Nonviolent Communication (Oren Jay So...
PDF
Threads 01: Criação e controle de threads
PPTX
Estrutura de repetição
PDF
Apresentação python fábio jr alves
PDF
Orientação a objetos em Python (compacto)
PPTX
Algorithmique
PDF
Python Introdução e Orientação a Objetos.pdf
PPTX
Algoritmos de ordenação
PDF
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
PDF
Curso básico de Algoritmos com Python
PPTX
Pneumonia
Aula: Tipos de Interface
Python: a primeira mordida
Introdução à programação
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Análise de Algoritmos - Análise Assintótica
Formation python
Introdução a python
Programando com Python
Parotidite Epidémica
Say What You Mean A Mindful Approach to Nonviolent Communication (Oren Jay So...
Threads 01: Criação e controle de threads
Estrutura de repetição
Apresentação python fábio jr alves
Orientação a objetos em Python (compacto)
Algorithmique
Python Introdução e Orientação a Objetos.pdf
Algoritmos de ordenação
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Curso básico de Algoritmos com Python
Pneumonia
Anúncio

Semelhante a Trabalho sobre a linguagem Python (20)

PDF
Comsolid2011 Introdução Python
PDF
Curso de Python (Básico) - Português
PDF
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
PDF
Python_2018-03-02-MC102KLMN-Aula02.pdf
PDF
Programando para web com python - Introdução a Python
PDF
Cherrypy - um framework para desenvolvimento rápido de aplicações web
PDF
Tutorial Python ed. #2
PDF
Por que Python? Vamos Conhecer? Vamos Aprender?
PDF
Python tutorial-ed3
ODP
Linguagem Python
PDF
Arduino e Python: Do It Yourself
PDF
Desenvolvimento de aplicações embarcadas utilizando Python
PDF
Computação Científica com SciPy - Brevíssimo Tutorial
PDF
Python Training #1 - ed4
PDF
Tutorial Python - 1
PDF
Python e tipagem estática
PDF
Dicas para sua carreira de Desenvolvedor PHP
PPTX
Introdução a linguagem Python
PDF
LP1 P01 - Python.pdf
Comsolid2011 Introdução Python
Curso de Python (Básico) - Português
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Python_2018-03-02-MC102KLMN-Aula02.pdf
Programando para web com python - Introdução a Python
Cherrypy - um framework para desenvolvimento rápido de aplicações web
Tutorial Python ed. #2
Por que Python? Vamos Conhecer? Vamos Aprender?
Python tutorial-ed3
Linguagem Python
Arduino e Python: Do It Yourself
Desenvolvimento de aplicações embarcadas utilizando Python
Computação Científica com SciPy - Brevíssimo Tutorial
Python Training #1 - ed4
Tutorial Python - 1
Python e tipagem estática
Dicas para sua carreira de Desenvolvedor PHP
Introdução a linguagem Python
LP1 P01 - Python.pdf
Anúncio

Último (12)

PDF
Processos no SAP Extended Warehouse Management, EWM100 Col26
PPTX
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
PPT
Conceitos básicos de Redes Neurais Artificiais
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PPTX
Analise Estatica de Compiladores para criar uma nova LP
PPTX
Aula 9 - Funções em Python (Introdução à Ciência da Computação)
PPTX
Viasol Energia Solar -Soluções para geração e economia de energia
PPTX
Tipos de servidor em redes de computador.pptx
PDF
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
PDF
Jira Software projetos completos com scrum
PPTX
Utilizando code blockes por andre backes
PDF
Manejo integrado de pragas na cultura do algodão
Processos no SAP Extended Warehouse Management, EWM100 Col26
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
Conceitos básicos de Redes Neurais Artificiais
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Analise Estatica de Compiladores para criar uma nova LP
Aula 9 - Funções em Python (Introdução à Ciência da Computação)
Viasol Energia Solar -Soluções para geração e economia de energia
Tipos de servidor em redes de computador.pptx
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
Jira Software projetos completos com scrum
Utilizando code blockes por andre backes
Manejo integrado de pragas na cultura do algodão

Trabalho sobre a linguagem Python

  • 1. Python Luan Ferreira Cardoso Ricardo Solon Zalla Trabalho para o curso de Linguagens de Programação do 9º período de Engenharia da Computação do IME 20 de maio de 2016
  • 2. Sumário 1. Introdução 2. Python comparada à Java 3. O básico de Python 4. Variáveis e tipo de dados 5. Expressões e comandos 6. Modularização 7. Polimorfismo 8. Exceções 9. Concorre ̂ncia
  • 4. O que é Python? ● Criado em 1990 por Guido Van Rossum ● Sobre o Pytho original, Van Rossum escreveu em 1996: “Seis anos atrás, em Dezembro de 1989, eu estava procurando um hobbie de programação que me manteria ocupado durante a semana de Natal. Meu escritório estaria fechado … No entanto, eu tinha um computador em casa e não tanta coisa a mais assim pra fazer. Eu decidi escrever um interpretador para uma nova linguagem de script que eu estava pensando ultimamente: uma descendente do ABC que seria endereçada para Unix/C hackers. Eu escolhi Python com o título do projeto, me pareceu um título com um humor irreverente (e de um grande fã de Monty Python’s Flying Circus).
  • 6. Python é uma linguagem de script? ● Geralmente pensada com uma mas é principalmente uma questão de marketing ○ As pessoas pensam que linguagens de script são mais fáceis de aprender e utilizar ● No entanto Python é uma linguagem de programação bem trabalhada, dinâmica e coerente podendo ser utilizada numa gama muito grande de aplicações.
  • 7. Filosofia de Design The Zen of Python, por Tim Peters tradução livre Bonito é melhor que feia. Explícito é melhor que implícito. Simples é melhor que complexo. Complexo é melhor que complicado. Linear é melhor aninhado. Esparso é melhor que denso. Legibilidade conta. Casos especiais não são especiais o suficiente para quebrar regras Embora praticabilidade seja melhor que pureza. Erros nunca deverão passar em silêncio A menos que explicitamente silenciados. Caso ocorra ambiguidade, recuse a tentação de adivinhar. Deveria existir um - e preferencialmente somente um - jeito óbvio de fazer. Embora esse jeito possa ser não tão óbvio a menos que você seja Holandês. Agora é melhor que nunca. Embora nunca é melhor que exatamente agora. Se a implementação é difícil de explicar, é uma má idéia. Se a implementação é fácil de explicar, pode ser uma boa idéia. Namespaces é uma grande ideia -- vamos fazer mais disso!
  • 10. Por que Python? ● Design fácil de ser aprendido ○ Limpo ○ Muito poucas palavras chaves ● Altamente portátil ○ Roda quase em qualquer lugar - servidores e estações de trabalho ○ Utiliza byte-codes independente de máquina ● Extensível ○ Design pode ser extensível utilizando C/C++, permitindo acesso à muitas bibliotecas externas
  • 11. Características notórias ● Sintaxe limpa mais tipo de dados de alto nível ○ Isso leva a uma codificação rápida! ● Utiliza espaço em branco para delimitar blocos ○ Humanos geralmente fazem isso, por que não uma linguagem de programação? ● Variáveis não necessitam de declaração ○ Muito embora não seja uma linguagem sem tipo.
  • 12. Produtividade ● Tempo de desenvolvimento reduzido ○ tempo de codificação é de 2-10 vezes menor que C,C++, Java ● Manutenção de código melhorada ○ o código é extremamente legível ● Menor treinamento ○ linguagem é muito fácil de aprender
  • 13. Para que ela é utilizada? ● rápida prototipação ● web script ● Aplicações científicas ● Linguagens de extensão ● Processamento XML ● Aplicações de banco de dados ● Aplicações de interface
  • 15. Python vs. Java ● Código é de 5-10 mais conciso ● Desenvolvimento muito mais rápido ○ Sem fase de compilação ○ Menos codificação ● Sim, ela roda mais devagar ○ No entanto, desenvolvimento é muito mais rápido! ● Utilize Python com Java: Jython!
  • 17. Programas em Python ● Programas em Python e módulos são escritos como arquivos texto com tradicionalmente uma extensão .py ● Cada modulo Python tem o seu próprio namespace discreto ● Namespace dentro de um módulo Phyton é um namespace global ● Módulos Python e programas são diferenciados somente pelo jeito que eles são chamados ○ arquivos .py executados diretamente são programas (geralmente chamados scripts) ○ arquivos .py referenciados via declaração statement são módulos ● Portanto, o mesmo arquivo .py pode ser um programa/script ou um módulo
  • 18. Python - Conceitos ● Python é uma linguagem ○ Interpretada ○ Multiparadigmas: orientadas a objeto, imperativa, funcional e procedural ○ Fortemente tipada ○ Dinamicamente tipada
  • 20. Váriaveis e Tipos ● Variáveis não precisam de declaração ○ >>> a=1 ○ >>> ● Como uma atribuição de valor é uma declaração não há resultado impresso na tela ○ >>>a ○ 1 ● Um nome de variável sozinha é uma expressão. Portanto o resultado é impresso na tela
  • 21. Váriaveis e Tipos ● Variáveis devem ser criadas antes delas serem usadas ○ >>> b ○ Traceback (innermost last): ○ File “<interactive input>”, line ○ 1, in? ○ NameEroor: b ○ >>> ● Objetos sempre tem um tipo ○ >>>a=1 ○ >>>type(a) ○ <type ‘int’> ○ >>> a=”Luan” ○ type(a) ○ <type ‘string’>
  • 22. Tarefas vs Testes de Igualdade ● Tarefas são executadas com um simples = ● Testes de igualdade são realizados com um duplo = (==) ○ Promoções sensíveis de tipo são definidos ○ Testes de identidade com o operador is ● >>> 1==1 ● 1 ● >>> 1.0==1 ● 1 ● >>> “1”==1 ● 0
  • 24. Tipos de Dados ● Strings ○ Pode incluir qualquer tipo de dado, incluindo NULLs embutidos ○ Declarado incluindo single, double ou triple aspas ○ >>> s = “Hi there” ○ >>> s ○ ‘Hi there’ ○ >>> s = “Embedded ‘quote’” ○ >>>s ○ “Embedded ‘quote’”
  • 25. Tipos de Dados ● Aspas triplas úteis para strings multilinhas ○ >>> s = “““ uma string ○ … muito longa com “aspas” ou ○ qualquer outra coisa“““ ○ >>> s ○ ‘uma string muito longa com “aspas” ou qualquer outra coisa’ ○ >>> len(s) ○ 45
  • 26. Tipos de Dados ● Inteiros implementados utilizando long C ○ Como C, divisão de inteiros retornam o floor ○ >>> 5/2 ○ 2 ● Tipos Floats implementados utilizando doubles C
  • 27. Tipos de Dados ● Tipos de Dados de alto nível ○ Pode conter qualquer objeto ○ Declarado utilizando colchetes ○ >>> 1= []# An empty list ○ >>> l.append(1) ○ >>> l.append(“Hi there”) ○ >>> len(l) ○ 2 ○ >>>l ○ [1, ‘Hi there’]
  • 28. Listas e Strings ● Classes de sequências built-in ○ Fatiamento e ordenação [begin : end : ordem] >>> lista = [1, 'python', 4.3] >>> lista[:2] [1, 'python'] >>> lista[::-1] [4.3, 'python', 1] >>> len(lista) >>> 3 >>> s = ‘551 arof’ >>> s[::-1] >>> 155 fora
  • 29. Tipos de Dados ● Tuplas são similares à listas ○ Sequencia de itens ○ A diferença chave é que são imutáveis ○ Frequentemente utilizado no lugar de estruturas simples ○ point = 2,3 ○ >>> x,y = point ○ >>> x ○ 2 ● Tuplas são particularmente utilizadas para retornar múltiplos valores de uma função ○ >>> x,y = GetPoint()
  • 30. Tipos de Dados ● Dicionários aceitam chave - par de valores ○ Frequentemente chamados maps ou hashes. Implementados utilizando hash - tables ○ Chaves podem ser objetos imutáveis, valores podem ser qualquer objeto ○ Declarados utilizando colchetes ○ >>> d={} ○ >>> d[0]= “ Olá ” ○ >>> d[“foo”] = 1 ○ >>> len(d) ○ 2 ○ >>> d[0] ○ ‘ Olá ‘
  • 32. Expressões e Comandos ● Expressões ○ Instruções que o interpretador python executa Atribuição não produz saída >>> my_list = [‘LP’, 3, 3.14] >>> print my_list [‘LP’, 3, 3.14] >>> print my_list[1]+my_list[2] 6.14 >>> 5892719 % 417 92 ● Precedência de operadores ○ Acrônimo PEMDAS ● Expressões em curto circuito ○ Operadores and, or ○ Resultado: Booleano
  • 34. Modularização Não força a pensar em objetos mas → Todos os tipos são derivados de Object(): 3 é instância de int() → Todos os tipos são classes Passagem de parâmetros → Somente por referência (sem necessidade de operadores) TADs → Suporte a encapsulamento Variáveis privadas - Não existe modificador de acesso protected/private - Convenção: Prefixo _ parte não pública - Prefixo __ #__spam -> _nomeclasse__spam → Suporte a polimorfismo Compilação separada → Não é compilado em etapa separada antes da execução → Compilação “on-the-fly”, código de bytes independente da plataforma
  • 35. Modularização Suporte a módulos ● fibonacci.py ○ Importar do shell >>> import fibonacci >>> fibonacci.fib_rec(30) 832040 ○ >>> from fibonacci import fib_rec, fib_ite >>> fib_rec(30) 832040 ○ >>> from fibonacci import * as f ● Atribuição de nome local ○ >>> rec = fibonacci.fib_rec
  • 37. Polimorfismo ● Oveload ○ Operadores __add__, __mult__, … def __add__(self, c): return Complex(self.real + c.real, self.imag + c.imag) >>> c+d*e ● Override ○ Classes derivadas podem sobrescrever classe base → Referenciar base (super) para chamar método dela >>> class A(object): ... def who_is(self): ... print 'A' >>> class B(A): ... def who_is(self): ... print 'B' ... >>> x = B() >>> x.who_is() # chama método da classe B >>> super(B, x).who_is() # chama método da classe A
  • 38. Polimorfismo ● -Herança ○ Sem modificadores de acesso ○ Herança múltipla class NomeClasseDerivada(Base1, Base2, Base3): ● -Classe abstrata ○ Módulo Abstract Base Class (ABC) __metaclass__ = ABCMeta #atributo @abstractmethod #método ● Metaclasses ○ Derivadas de type Instanciar classes: atributo # __metaclass__ = metaclasse
  • 39. class Pessoa: def __init__(self, nome ='', idade=0): self.nome = nome self.idade = idade def getIdade(self): return self.idade class PessoaFisica(Pessoa): def __init__(self, CPF, nome='', idade=0): Pessoa.__init__(self, nome, idade) self.CPF = CPF class PessoaJuridica(Pessoa): def __init__(self, CNPJ, nome='', idade=0): Pessoa.__init__(self, nome, idade) self.CNPJ = CNPJ Polimorfismo
  • 40. Polimorfismo a = Pessoa() Pessoa.__init__(a, 'Leonardo', 22) b = PessoaFisica('122.333.332-1', nome='', idade=0) banco = PessoaJuridica('00.000.000/0001-11', nome='Banco do Brasil', idade=435) print a.nome # imprime Leonardo print a.idade # imprime 22 print b.CPF # imprime 122.333.332-1 print banco.CNPJ # imprime 00.000.000/0001-11
  • 42. Exceções 1. Erros de sintaxe 2. Exceções - Sintaticamente correto - Erro na execução
  • 43. Built-in Exceptions >>> 10 * (1/0) Traceback (most recent call last): File "<stdin>", line 1, in ? ZeroDivisionError: integer division or modulo by zero >>> '2' + 2 Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: cannot concatenate 'str' and 'int' objects
  • 44. Handling Exceptions >>> while True: ... try: ... x = int(raw_input("Please enter a number: ")) ... break ... except ValueError: ... print "Oops! That was no valid number. Try again..."
  • 45. User-defined Exceptions ● Criar classes derivadas de Exception() ○ MinhaException(Exception) { … } class Error(Exception): """Base class for exceptions in this module.""" pass class Ex1(Error): """Base class for exception 1 in this module.""" pass class Ex2(Error): """Base class for exception 2 in this module.""" pass
  • 46. User-defined Exceptions >>> class MyError(Exception): ... def __init__(self, value): ... self.value = value ... def __str__(self): ... return repr(self.value) ... >>> try: ... raise MyError(2*2) ... except MyError as e: ... print 'My exception occurred, value:', e.value ... My exception occurred, value: 4 >>> raise MyError('oops!') Traceback (most recent call last): File "<stdin>", line 1, in ? __main__.MyError: 'oops!'
  • 47. Clean-up Actions finally ○ Clause do try que será executada em qualquer circunstância ○ Exceções não tratadas serão lançadas após o finally
  • 48. Clean-up Actions >>> def divide(x, y): ... try: ... result = x / y ... except ZeroDivisionError: ... print "division by zero!" ... else: ... print "result is", result ... finally: ... print "executing finally clause" ... >>> divide(2, 1) result is 2 executing finally clause >>> divide(2, 0) division by zero! executing finally clause >>> divide("2", "1") executing finally clause Traceback (most recent call last): File "<stdin>", line 1, in ? File "<stdin>", line 3, in divide TypeError: unsupported operand type(s) for /: 'str' and 'str'
  • 50. Concorrência ● Módulos built-in ○ _thread: baixo nível, light-weight tasks ○ threading: alto nível, mais complexa Controlar multiplas threads: thread.start_new_thread(function, args[,kwargs]) Sincronização: lock, Semaphore -