Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

Minicurso de Python
Nome: Kaike Sa Teles Rocha Alves
E-mail: kaike.alves@engenharia.ufjf.br
Universidade Federal de Juiz de Fora
Programa de Pós-Graduação em Modelagem Computational
5 de novembro de 2021
ALVES, K.S.T.R. Programação em Python 1 / 309
Sumário
1 Introdução ao Python
2 Ferramentas de Controle de Fluxo
3 Estruturas de Dados
4 Módulos
5 Entrada e Saída
6 Erros e Exceções
7 Classes
8 Bibliotecas Padrão
9 Ambientes Virtuais e Pacotes
ALVES, K.S.T.R. Programação em Python 2 / 309
Seção:
1 Introdução ao Python
2 Ferramentas de Controle de Fluxo
3 Estruturas de Dados
4 Módulos
5 Entrada e Saída
6 Erros e Exceções
7 Classes
8 Bibliotecas Padrão
9 Ambientes Virtuais e Pacotes
ALVES, K.S.T.R. Programação em Python 3 / 309
Introdução ao Python
No python, utiliza-se a cerquilha (#) para fazer comentários no código
As variáveis não precisam ser declaradas
Os seguinte símbolos são usados para efetuar as operações
matemáticas:
1 Soma +
2 Subtração -
3 Divisão /
4 Multiplicação ∗
5 Potência ∗∗
Parêntesis definem a ordem de preferência das operações
ALVES, K.S.T.R. Programação em Python 4 / 309
Introdução ao Python
Figura 1: Operações matemáticas
ALVES, K.S.T.R. Programação em Python 5 / 309
Introdução ao Python
Utilizar o síbolo de divisão duas vezes retorna apenas a parte inteira de
uma divisão. Ex: 13 // 5 = 2
O símbo de porcentagem (%) retorna o resto de uma divisão. Ex: 13
% 5 = 3
Ao tentar usar uma variável que não foi atribuida valor, o programa
retornará uma mensagem de erro
O símbolo underline (_) é usado para retornar o último valor gerado
pelo programa
ALVES, K.S.T.R. Programação em Python 6 / 309
Introdução ao Python
Figura 2: Outras operações
ALVES, K.S.T.R. Programação em Python 7 / 309
Introdução ao Python
Strings são atribuidas usando aspas simples ou duplas
Quando deseja-se colocar o símbolo de aspas, usa-se a barra antes das
aspas
ALVES, K.S.T.R. Programação em Python 8 / 309
Introdução ao Python
Figura 3: Criando strings
ALVES, K.S.T.R. Programação em Python 9 / 309
Introdução ao Python
Três aspas simples ou duplas são usadas para criar strings com várias
linhas
ALVES, K.S.T.R. Programação em Python 10 / 309
Introdução ao Python
Figura 4: Criando strings com várias linhas
ALVES, K.S.T.R. Programação em Python 11 / 309
Introdução ao Python
Podemos manipular strings usando operadores matemáticos
Podemos acessar os caracteres de uma string
ALVES, K.S.T.R. Programação em Python 12 / 309
Introdução ao Python
Figura 5: Manipulando strings
ALVES, K.S.T.R. Programação em Python 13 / 309
Introdução ao Python
Quando o usuário digita um valor maior que o tamanho da string o
programa retorna um erro
Buscar uma faixa de valores que extrapola a string não retorna erro, o
programa retorna parte da string que coincide com a faixa de valores
desejada, ou retorna vazio
Não é possível alterar o caractere de uma string
A função len() retorna o tamanho da string
ALVES, K.S.T.R. Programação em Python 14 / 309
Introdução ao Python
Figura 6: Manipulando strings
ALVES, K.S.T.R. Programação em Python 15 / 309
Introdução ao Python
Uma das estruturas de dados mais versáteis no Python é a lista
A lista pode ser composta de tipos de dados diferentes
A manipulação de lista é muito parecida com a de strings
A lista permite alteração de seus elementos
A função append pode ser usada para adicionar elemento ao final de
uma lista
O colchete vazio apaga valores
É possível criar lista aninhada, isto é, lista dentro de lista
ALVES, K.S.T.R. Programação em Python 16 / 309
Introdução ao Python
Figura 7: Criando listas
ALVES, K.S.T.R. Programação em Python 17 / 309
Introdução ao Python
Figura 8: Manipulando listas
ALVES, K.S.T.R. Programação em Python 18 / 309
Introdução ao Python
Figura 9: Manipulando listas
ALVES, K.S.T.R. Programação em Python 19 / 309
Introdução ao Python
Podemos fazer múltiplas atribuições em uma mesma linha de código
While é uma estrutura de repetição que executa uma série de
comandos enquando uma determinada condição for satisfeita
O corpo do laço deve ser identado
Podemos usar o comando end=’,’ para imprimir os resultados na
mesma linha
ALVES, K.S.T.R. Programação em Python 20 / 309
Introdução ao Python
Figura 10: Primeiros passos na programação
ALVES, K.S.T.R. Programação em Python 21 / 309
Seção:
1 Introdução ao Python
2 Ferramentas de Controle de Fluxo
3 Estruturas de Dados
4 Módulos
5 Entrada e Saída
6 Erros e Exceções
7 Classes
8 Bibliotecas Padrão
9 Ambientes Virtuais e Pacotes
ALVES, K.S.T.R. Programação em Python 22 / 309
Ferramentas de Controle de Fluxo
O if é usado para verificar a validade de uma condição
O elif verifica uma outra condição caso o if não seja verdadeiro
O else será verdadeiro sempre que o if e os elif forem falsos
ALVES, K.S.T.R. Programação em Python 23 / 309
Ferramentas de Controle de Fluxo
Figura 11: Condicional if-elif-else
ALVES, K.S.T.R. Programação em Python 24 / 309
Ferramentas de Controle de Fluxo
O for é uma estrutura de repetição que itera sobre uma sequência de
dados (lista ou strings)
Não é recomendado alterar uma coleção que está sendo usada para
iterar, o ideal é criar uma cópia
A função range() é usada para iterar usando sequências numéricas
A função range pode receber como parâmetros o início, o fim, e o
tamanho do passo de variação
Podemos usar o range e o len em conjunto
ALVES, K.S.T.R. Programação em Python 25 / 309
Ferramentas de Controle de Fluxo
Figura 12: Estrutura de repetição for
ALVES, K.S.T.R. Programação em Python 26 / 309
Ferramentas de Controle de Fluxo
Figura 13: Estrutura de repetição for
ALVES, K.S.T.R. Programação em Python 27 / 309
Ferramentas de Controle de Fluxo
Figura 14: Estrutura de repetição for
ALVES, K.S.T.R. Programação em Python 28 / 309
Ferramentas de Controle de Fluxo
Figura 15: Estrutura de repetição for
ALVES, K.S.T.R. Programação em Python 29 / 309
Ferramentas de Controle de Fluxo
O break encerra um laço mais interno
O laço pode ter o else, que é executado quando o for chega ao final
das iterações ou quando uma condição do while se torna falsa. Mas
não é executada quando o laço é interrompido pelo break
O continue faz com que as linhas de comando seguintes não sejam
executadas, quando dentro de um for, e avança para o próximo valor
do iterador
O pass, que pode ser usado para prencher uma função, não executa
nenhuma ação
ALVES, K.S.T.R. Programação em Python 30 / 309
Ferramentas de Controle de Fluxo
Figura 16: Uso do for-else e do break
ALVES, K.S.T.R. Programação em Python 31 / 309
Ferramentas de Controle de Fluxo
Figura 17: Uso do continue
ALVES, K.S.T.R. Programação em Python 32 / 309
Ferramentas de Controle de Fluxo
Figura 18: Uso do pass
ALVES, K.S.T.R. Programação em Python 33 / 309
Ferramentas de Controle de Fluxo
Def é um comando usado para criar funções
Usa-se o def seguido pelo nome da função, e a lista de parâmetros
entre parêntesis
Em python, def sempre retorna um resultado, ainda que seja apenas
None
ALVES, K.S.T.R. Programação em Python 34 / 309
Ferramentas de Controle de Fluxo
Figura 19: Definindo funções
ALVES, K.S.T.R. Programação em Python 35 / 309
Ferramentas de Controle de Fluxo
Figura 20: Definindo funções
ALVES, K.S.T.R. Programação em Python 36 / 309
Ferramentas de Controle de Fluxo
Podemos modificar o exemplo de fibonacci para retornar um resultado
usando return
Não colocar argumento no return faz com que a função retorne None
ALVES, K.S.T.R. Programação em Python 37 / 309
Ferramentas de Controle de Fluxo
Figura 21: Definindo funções
ALVES, K.S.T.R. Programação em Python 38 / 309
Ferramentas de Controle de Fluxo
Definir argumentos padrão ajuda a reduzir o número de argumentos a
serem passados
O return encerra a execução de uma função, ainda que haja códigos
dentro da função após o return
ALVES, K.S.T.R. Programação em Python 39 / 309
Ferramentas de Controle de Fluxo
Figura 22:Definindo funções com valores padrão
ALVES, K.S.T.R. Programação em Python 40 / 309
Ferramentas de Controle de Fluxo
Figura 23: Chamando funções com argumentos opcionais
ALVES, K.S.T.R. Programação em Python 41 / 309
Ferramentas de Controle de Fluxo
Existem algumas formas diferentes de passar argumentos de funções
ALVES, K.S.T.R. Programação em Python 42 / 309
Ferramentas de Controle de Fluxo
Figura 24: Definindo funções com valores padrão
ALVES, K.S.T.R. Programação em Python 43 / 309
Ferramentas de Controle de Fluxo
1 Argumento:
Figura 25: Argumento posicional
Figura 26: Argumento por palavra-chave
ALVES, K.S.T.R. Programação em Python 44 / 309
Ferramentas de Controle de Fluxo
2 Argumentos:
Figura 27: Argumento por palavra-chave
Figura 28: Argumento por palavra-chave
ALVES, K.S.T.R. Programação em Python 45 / 309
Ferramentas de Controle de Fluxo
2 Argumentos:
Figura 29: Misto
Figura 30: Argumento posicional
ALVES, K.S.T.R. Programação em Python 46 / 309
Ferramentas de Controle de Fluxo
Argumentos **nome definem dicionários
Argumentos *nome definem tuplas
As tuplas devem sempre vir antes dos dicionários
ALVES, K.S.T.R. Programação em Python 47 / 309
Ferramentas de Controle de Fluxo
Figura 31: Criando funções com tuplas e dicionários
ALVES, K.S.T.R. Programação em Python 48 / 309
Ferramentas de Controle de Fluxo
Figura 32: Chamando funções com tuplas e dicionários
ALVES, K.S.T.R. Programação em Python 49 / 309
Ferramentas de Controle de Fluxo
Podemos definir se os parâmetros serão posicionais, por
palavras-chave, ou ambos
Parâmetros colocados antes do símbolo barra(/) são estritamente
posicionais
Parâmetros depois da barra e antes do simbolo de asterisco(*) são
posicionais ou por palavra-chave
E por fim, parâmetros após o asterisco(*) são parâmetros
palavras-chave
ALVES, K.S.T.R. Programação em Python 50 / 309
Ferramentas de Controle de Fluxo
Figura 33: Especificando o tipo de parâmetro
ALVES, K.S.T.R. Programação em Python 51 / 309
Ferramentas de Controle de Fluxo
Figura 34: Função com parâmetro posicional ou palavra-chave
ALVES, K.S.T.R. Programação em Python 52 / 309
Ferramentas de Controle de Fluxo
Figura 35: Função com parâmetro posicional apenas
ALVES, K.S.T.R. Programação em Python 53 / 309
Ferramentas de Controle de Fluxo
Figura 36: Função com parâmetro palavra-chave apenas
ALVES, K.S.T.R. Programação em Python 54 / 309
Ferramentas de Controle de Fluxo
Figura 37: Função com parâmetro posicional, palavra-chave e ambos
ALVES, K.S.T.R. Programação em Python 55 / 309
Ferramentas de Controle de Fluxo
As tuplas permitem que o usuário passe um número indeterminado de
parâmetros
Quaisquer parâmetros formais que ocorrem após o parâmetro *args
são argumentos por palavra-chave
ALVES, K.S.T.R. Programação em Python 56 / 309
Ferramentas de Controle de Fluxo
Figura 38: Tupla como argumento de função
ALVES, K.S.T.R. Programação em Python 57 / 309
Ferramentas de Controle de Fluxo
É possível usar a função list de forma alternativa usando tuplas
ALVES, K.S.T.R. Programação em Python 58 / 309
Ferramentas de Controle de Fluxo
Figura 39: Função list
ALVES, K.S.T.R. Programação em Python 59 / 309
Ferramentas de Controle de Fluxo
A função list também cria uma lista com cada caractere de uma string
ALVES, K.S.T.R. Programação em Python 60 / 309
Ferramentas de Controle de Fluxo
Figura 40: Função list
ALVES, K.S.T.R. Programação em Python 61 / 309
Ferramentas de Controle de Fluxo
Podemos criar argumentos nomeados usando dicionários
ALVES, K.S.T.R. Programação em Python 62 / 309
Ferramentas de Controle de Fluxo
Figura 41: Argumentos nomeados usando dicionários
ALVES, K.S.T.R. Programação em Python 63 / 309
Ferramentas de Controle de Fluxo
A função lambda retornando a soma de seus dois argumentos: lambda
a, b: a+b
ALVES, K.S.T.R. Programação em Python 64 / 309
Ferramentas de Controle de Fluxo
Figura 42: Função soma usando lambda
ALVES, K.S.T.R. Programação em Python 65 / 309
Ferramentas de Controle de Fluxo
Outro uso é passar uma pequena função como um argumento
ALVES, K.S.T.R. Programação em Python 66 / 309
Ferramentas de Controle de Fluxo
Figura 43: Lambda como argumento
ALVES, K.S.T.R. Programação em Python 67 / 309
Ferramentas de Controle de Fluxo
Docstrings (strings de documentação) são strings que inserimos dentro
de nosso código Python com o intuito de fornecer uma explicação
sobre um dado funcionamento do código
A primeira linha deve sempre ser curta, um resumo conciso do
propósito do objeto. Essa linha deve começar com letra maiúscula e
terminar com ponto
Caso haja mais de uma linha, a segunda linha deve estar em branco,
separando visualmente o resumo do resto da descrição
As linhas seguintes devem conter um ou mais parágrafos descrevendo
as convenções de chamada ao objeto, seus efeitos colaterais, etc
ALVES, K.S.T.R. Programação em Python 68 / 309
Ferramentas de Controle de Fluxo
Figura 44: Docstring sem identação na primeira linha
ALVES, K.S.T.R. Programação em Python 69 / 309
Ferramentas de Controle de Fluxo
Figura 45: Docstring com identação na primeira linha
ALVES, K.S.T.R. Programação em Python 70 / 309
Ferramentas de Controle de Fluxo
Anotações de função são informações de metadados completamente
opcionais sobre os tipos usados pelas funções definidas pelo usuário
Anotações são armazenadas no atributo __annotations__ da função
como um dicionário e não tem nenhum efeito em qualquer outra parte
da função
Anotações de parâmetro são definidas por dois-pontos (:) após o
nome do parâmetro, seguida pelo tipo de parâmetro
Anotações do tipo do retorno são definidas por um literal ->, seguida
pelo tipo do retorno da função
ALVES, K.S.T.R. Programação em Python 71 / 309
Ferramentas de Controle de Fluxo
Figura 46: Exemplo de anotações: saída inteira
ALVES, K.S.T.R. Programação em Python 72 / 309
Ferramentas de Controle de Fluxo
Figura 47: Exemplo de anotações: saída string
ALVES, K.S.T.R. Programação em Python 73 / 309
Ferramentas de Controle de Fluxo
Figura 48: Exemplo de anotações: saída declarada errada
ALVES, K.S.T.R. Programação em Python 74 / 309
Seção:
1 Introdução ao Python
2 Ferramentas de Controle de Fluxo
3 Estruturas de Dados
4 Módulos
5 Entrada e Saída
6 Erros e Exceções
7 Classes
8 Bibliotecas Padrão
9 Ambientes Virtuais e Pacotes
ALVES, K.S.T.R. Programação em Python 75 / 309
Estruturas de Dados
A lista é uma estrutura de dados que serve para guardar valores, sejam
eles numéricos ou inteiros
Para criar lista usa-se a chave, com os elementos separados por
virgula, ex: lista = [1, 10, ’Python’]
ALVES, K.S.T.R. Programação em Python 76 / 309
Estruturas de Dados
Figura 49: Criado listas
ALVES, K.S.T.R. Programação em Python 77 / 309
Estruturas de Dados
A estrutura lista possui os seguintes métodos:
− lista.append(x) - Adiciona um item ao fim da lista. Equivalente a
lista[len(lista):] = [x]
− lista.extend(iterable) - Prolonga a lista, adicionando ao fim dela todos
os elementos do argumento iterable, passado como parâmetro.
Equivalente a lista[len(lista):] = iterable
− lista.insert(i, x) - Insere um item em uma dada posição. O primeiro
argumento é o índice do elemento antes do qual será feita a inserção,
assim lista.insert(0, x) insere um elemento na primeira posição da lista,
e lista.insert(len(lista), x) e equivale a lista.append(x)
− lista.remove(x) - Remove o primeiro item encontrado na lista cujo valor
é igual a x. Se não existir valor igual, um aviso escrito ValueError é
informado
ALVES, K.S.T.R. Programação em Python 78 / 309
Estruturas de Dados
Figura 50: Métodos de listas
ALVES, K.S.T.R. Programação em Python 79 / 309
Estruturas de Dados
A estrutura lista possui os seguintes métodos:
− lista.count(x) - Devolve o número de vezes em que x aparece na lista
− lista.sort(key=None, reverse=False) - Ordena os itens na lista (os
argumentos podem ser usados para personalizar a ordenação,veja a
função sorted() para maiores explicações)
− lista.reverse() - Inverte a ordem dos elementos na lista
− lista.copy() - Devolve uma cópia rasa da lista. Equivalente a lista[:]
ALVES, K.S.T.R. Programação em Python 80 / 309
Estruturas de Dados
Figura 51: Métodos de listas
ALVES, K.S.T.R. Programação em Python 81 / 309
Estruturas de Dados
A estrutura lista possui os seguintes métodos:
− lista.pop([i]) - Remove um item na i-ésima posição da lista e informa o
elemento que foi removido. Se nenhum índice é especificado,
lista.pop() remove e devolve o último item da lista. (Os colchetes ao
redor do i na demonstração do método indica que o parâmetro é
opcional, e não que é necessário escrever estes colchetes ao chamar o
método. Você verá este tipo de notação frequentemente na Biblioteca
de Referência Python.)
− lista.index(x[, start[, end]]) - Devolve o índice base-zero do primeiro
item cujo valor é igual a x, levantando ValueError se este valor não
existe. Os argumentos opcionais start e end são interpretados como
nas notações de fatiamento e são usados para limitar a busca para uma
subsequência específica da lista. O índice retornado é calculado em
relação ao início da sequência inteira, e não referente ao argumento
start.
− lista.clear() - Remove todos os itens de uma lista. Equivalente a del
lista[:]
ALVES, K.S.T.R. Programação em Python 82 / 309
Estruturas de Dados
Figura 52: Métodos de listas
ALVES, K.S.T.R. Programação em Python 83 / 309
Estruturas de Dados
Podemos usar as listas como pilhas
As pilhas são estruturas de dados regidas pelo princípio: Last In First
Out (LIFO)
Os métodos append() e pop() são úteis para manipular pilhas usando
listas em Python
ALVES, K.S.T.R. Programação em Python 84 / 309
Estruturas de Dados
Figura 53: Pilhas usando listas
ALVES, K.S.T.R. Programação em Python 85 / 309
Estruturas de Dados
A fila segue a política First in First out (FIFO)
Os métodos append e pop não são tão eficientes para este propósito.
Para isso, utiliza-se a biblioteca collections
ALVES, K.S.T.R. Programação em Python 86 / 309
Estruturas de Dados
Figura 54: Pilhas usando filas
ALVES, K.S.T.R. Programação em Python 87 / 309
Estruturas de Dados
Podemos usar alguns recursos no Python para encurtar códigos na
manipulação de listas
ALVES, K.S.T.R. Programação em Python 88 / 309
Estruturas de Dados
Figura 55: Criando listas
ALVES, K.S.T.R. Programação em Python 89 / 309
Estruturas de Dados
Podemos criar listas usando for e if em uma mesma linha
ALVES, K.S.T.R. Programação em Python 90 / 309
Estruturas de Dados
Figura 56: Criando listas
ALVES, K.S.T.R. Programação em Python 91 / 309
Estruturas de Dados
Vejamos mais alguns exemplos de manipulação de listas
ALVES, K.S.T.R. Programação em Python 92 / 309
Estruturas de Dados
Figura 57: Manipulando listas de inteiros
ALVES, K.S.T.R. Programação em Python 93 / 309
Estruturas de Dados
Figura 58: Manipulando listas de strings
ALVES, K.S.T.R. Programação em Python 94 / 309
Estruturas de Dados
Figura 59: Manipulando tuplas
ALVES, K.S.T.R. Programação em Python 95 / 309
Estruturas de Dados
Figura 60: Uma manipulação mais complexa
ALVES, K.S.T.R. Programação em Python 96 / 309
Estruturas de Dados
Quando temos uma lista dentro de outra lista, dizemos esta ser uma
lista aninhada
Podemos usar as listas aninhadas para simular matrizes
Vejamos como manipular as listas aninhadas
ALVES, K.S.T.R. Programação em Python 97 / 309
Estruturas de Dados
Figura 61: Manipulando lista aninhada
ALVES, K.S.T.R. Programação em Python 98 / 309
Estruturas de Dados
Reescrevendo o exemplo anterior de uma forma mais complexa, temos:
Figura 62: Manipulando lista aninhada
ALVES, K.S.T.R. Programação em Python 99 / 309
Estruturas de Dados
Usando a função zip:
Figura 63: Manipulando lista aninhada
ALVES, K.S.T.R. Programação em Python 100 / 309
Estruturas de Dados
Usando a função del para remover elementos de lista
Figura 64: Comando del
ALVES, K.S.T.R. Programação em Python 101 / 309
Estruturas de Dados
Tuplas são uma estrutura de dados parecida com listas, porém
imutável
Uma tupla consiste em uma sequência de valores separados por
vírgulas, podendo ou não ser envolvidas por parentesis
Tuplas usualmente contém uma sequência heterogênea de elementos e
que são acessados via desempacotamento
Tuplas vazias são construídas por um par de parênteses vazios
Tupla unitária é construída por um único valor e uma vírgula entre
parênteses
ALVES, K.S.T.R. Programação em Python 102 / 309
Estruturas de Dados
Figura 65: Manipulando tuplas
ALVES, K.S.T.R. Programação em Python 103 / 309
Estruturas de Dados
As tuplas podem ser aninhadas:
Figura 66: Tupla aninhada
ALVES, K.S.T.R. Programação em Python 104 / 309
Estruturas de Dados
Tuplas de listas:
Figura 67: Manipulação de tuplas
ALVES, K.S.T.R. Programação em Python 105 / 309
Estruturas de Dados
Tuplas vazias e unitárias:
Figura 68: Manipulação de tuplas
ALVES, K.S.T.R. Programação em Python 106 / 309
Estruturas de Dados
Empacotamento e desempacotamento de tuplas:
Figura 69: Manipulação de tuplas
ALVES, K.S.T.R. Programação em Python 107 / 309
Estruturas de Dados
Conjunto é uma estrutura de dados equivalente a conjuntos em
matemática, composto por um conjunto de elementos distintos, isto é,
um conjunto é uma coleção desordenada de elementos, sem elementos
repetidos
É possível adicionar ou excluir elementos de um conjunto e iterar os
elementos do conjunto
Usos comuns para conjuntos incluem a verificação eficiente da
existência de objetos e a eliminação de itens duplicados
Conjuntos também suportam operações matemáticas como união,
interseção, diferença e diferença simétrica
Para criar um conjunto usa-se chaves e um conjunto vazio usa-se a
expressão set()
ALVES, K.S.T.R. Programação em Python 108 / 309
Estruturas de Dados
Figura 70: Manipulação de conjuntos
ALVES, K.S.T.R. Programação em Python 109 / 309
Estruturas de Dados
Figura 71: Manipulação de conjuntos
ALVES, K.S.T.R. Programação em Python 110 / 309
Estruturas de Dados
Podemos usar recursos já vistos em listas:
Figura 72: Manipulação de conjuntos
ALVES, K.S.T.R. Programação em Python 111 / 309
Estruturas de Dados
Dicionário é outra estrutura de dados muito útil embutida em Python
Dicionários são também chamados de “memória associativa” ou “vetor
associativo” em outras linguagens
Diferente de sequências que são indexadas por inteiros, dicionários são
indexados por chaves (keys), que podem ser de qualquer tipo imutável
(como strings e inteiros)
Um bom modelo mental é imaginar um dicionário como um conjunto
não-ordenado de pares chave:valor, onde as chaves são únicas em uma
dada instância do dicionário
Dicionários são delimitados por chaves: {}, e contém uma lista de
pares chave:valor separada por vírgulas
O dicionário vazio é {}
ALVES, K.S.T.R. Programação em Python 112 / 309
Estruturas de Dados
Figura 73: Manipulação de dicionários
ALVES, K.S.T.R. Programação em Python 113 / 309
Estruturas de Dados
O construtor dict() produz dicionários diretamente de sequências de
pares chave-valor:
Figura 74: Manipulação de dicionários
ALVES, K.S.T.R. Programação em Python 114 / 309
Estruturas de Dados
Além disso, as compreensões de dicionários podem ser usadas para
criar dicionários a partir de expressões arbitrárias de chave e valor:
Figura 75: Manipulação de dicionários
ALVES, K.S.T.R. Programação em Python 115 / 309
Estruturas de Dados
Quando chaves são strings simples, é mais fácil especificar os pares
usando argumentos nomeados no construtor:
Figura 76: Manipulação de dicionários
ALVES, K.S.T.R. Programação em Python 116 / 309
Estruturas de Dados
Ao iterar sobre dicionários, a chave e o valor correspondente podem
ser obtidos simultaneamente usando o método items():
Figura 77: Técnicas de iteração
ALVES, K.S.T.R. Programação em Python 117 / 309
Estruturas de Dados
Ao iterar sobre sequências, a posição e o valorcorrespondente podem
ser obtidos simultaneamente usando a função enumerate():
Figura 78: Técnicas de iteração
ALVES, K.S.T.R. Programação em Python 118 / 309
Estruturas de Dados
Para percorrer duas ou mais sequências ao mesmo tempo, as entradas
podem ser pareadas com a função zip:
Figura 79: Técnicas de iteração
ALVES, K.S.T.R. Programação em Python 119 / 309
Estruturas de Dados
Para percorrer uma sequência em ordem inversa, chame a função
reversed() com a sequência na ordem original:
Figura 80: Técnicas de iteração
ALVES, K.S.T.R. Programação em Python 120 / 309
Estruturas de Dados
Para percorrer uma sequência de maneira ordenada, use a função
sorted(), que retorna uma lista ordenada com os itens, mantendo a
sequência original inalterada:
Figura 81: Técnicas de iteração
ALVES, K.S.T.R. Programação em Python 121 / 309
Estruturas de Dados
Usar set() em uma sequência elimina elementos duplicados. O uso de
sorted() em combinação com set() sobre uma sequência é uma
maneira idiomática de fazer um loop sobre elementos exclusivos da
sequência na ordem de classificação:
Figura 82: Técnicas de iteração
ALVES, K.S.T.R. Programação em Python 122 / 309
Estruturas de Dados
Às vezes é tentador alterar uma lista enquanto você itera sobre ela;
porém, costuma ser mais simples e seguro criar uma nova lista:
Figura 83: Técnicas de iteração
ALVES, K.S.T.R. Programação em Python 123 / 309
Estruturas de Dados
As condições de controle usadas em while e if podem conter quaisquer
operadores, não apenas comparações
Os operadores de comparação in e not in verificam se um valor ocorre
(ou não ocorre) em uma dada sequência
Os operadores is e is not comparam se dois objetos são na verdade o
mesmo objeto
Todos os operadores de comparação possuem a mesma precedência,
que é menor do que a prioridade de todos os operadores numéricos
Comparações podem ser encadeadas: Por exemplo a < b == c testa
se a é menor que b e também se b é igual a c
ALVES, K.S.T.R. Programação em Python 124 / 309
Estruturas de Dados
Comparações podem ser combinadas através de operadores booleanos
and e or, e o resultado de uma comparação (ou de qualquer outra
expressão), pode ter seu valor booleano negado através de not
Estes possuem menor prioridade que os demais operadores de
comparação
Entre eles, not é o de maior prioridade e or o de menor. Dessa forma,
a condição A and not B or C é equivalente a (A and (not B)) or C
Os operadores booleanos and e or são operadores curto-circuito: seus
argumentos são avaliados da esquerda para a direita, e a avaliação
encerra quando o resultado é determinado
ALVES, K.S.T.R. Programação em Python 125 / 309
Estruturas de Dados
É possível atribuir o resultado de uma comparação ou outra expressão
booleana para uma variável. O exemplo a seguir pega a primeira
variável não vazia:
Figura 84: Comparações
ALVES, K.S.T.R. Programação em Python 126 / 309
Estruturas de Dados
Objetos sequência podem ser comparados com outros objetos
sequência, desde que o tipo das sequências seja o mesmo.
A comparação utiliza a ordem lexicográfica: primeiramente os dois
primeiros itens são comparados, e se diferirem isto determinará o
resultado da comparação, caso contrário os próximos dois itens serão
comparados, e assim por diante até que se tenha exaurido alguma das
sequências
Se em uma comparação de itens, os mesmos forem também
sequências (aninhadas), então é disparada recursivamente outra
comparação lexicográfica
Se todos os itens da sequência forem iguais, então as sequências são
ditas iguais
Se uma das sequências é uma subsequência da outra, então a
subsequência é a menor
ALVES, K.S.T.R. Programação em Python 127 / 309
Estruturas de Dados
Alguns exemplos de comparações entre sequências do mesmo tipo:
Figura 85: Comparações
ALVES, K.S.T.R. Programação em Python 128 / 309
Seção:
1 Introdução ao Python
2 Ferramentas de Controle de Fluxo
3 Estruturas de Dados
4 Módulos
5 Entrada e Saída
6 Erros e Exceções
7 Classes
8 Bibliotecas Padrão
9 Ambientes Virtuais e Pacotes
ALVES, K.S.T.R. Programação em Python 129 / 309
Módulos
Ao sair e entrar de novo no interpretador Python, as definições
anteriores (funções e variáveis) são perdidas quando digitadas no
console
Portanto, é útil criar um script, dessa forma as programas criados
ficarão salvos. Observe o ambiente de programação do Python obtido
usando o anaconda
Figura 86: Script e console
ALVES, K.S.T.R. Programação em Python 130 / 309
Módulos
Se o programa se torna ainda maior, é uma boa prática dividi-lo em
arquivos menores, para facilitar a manutenção. Também é preferível
usar um arquivo separado para uma função que você escreveria em
vários programas diferentes, para não copiar a definição de função em
cada um deles
Tal arquivo é chamado de módulo; definições de um módulo podem
ser importadas para outros módulos, ou para o módulo principal
Um módulo é um arquivo contendo definições e instruções Python. O
nome do arquivo é o nome do módulo acrescido do sufixo .py
Dentro de um módulo, o nome do módulo (como uma string) está
disponível como o valor da variável global __name__
ALVES, K.S.T.R. Programação em Python 131 / 309
Módulos
Usando o editor para criar um arquivo chamado Fibo.py temos:
Figura 87: Sequência de Fibonacci
ALVES, K.S.T.R. Programação em Python 132 / 309
Módulos
Usando o console para importar o arquivo criado e chamar a função,
temos:
Figura 88: Importando a sequência de Fibonacci
ALVES, K.S.T.R. Programação em Python 133 / 309
Módulos
Um módulo pode conter tanto instruções executáveis quanto
definições de funções e classes
Essas instruções servem para inicializar o módulo. Eles são executados
somente na primeira vez que o módulo é encontrado em uma
instrução de importação
Cada módulo tem sua própria tabela de símbolos privada, que é usada
como tabela de símbolos global para todas as funções definidas no
módulo
Assim, o autor de um módulo pode usar variáveis globais no seu
módulo sem se preocupar com conflitos acidentais com as variáveis
globais do usuário
Por outro lado, se você precisar usar uma variável global de um
módulo, poderá fazê-lo com a mesma notação usada para se referir às
suas funções, nomemodulo.nomeitem.
ALVES, K.S.T.R. Programação em Python 134 / 309
Módulos
Módulos podem importar outros módulos
É costume, porém não obrigatório, colocar todos os comandos import
no início do módulo (ou script, se preferir)
As definições do módulo importado são colocadas na tabela de
símbolos global do módulo que faz a importação
ALVES, K.S.T.R. Programação em Python 135 / 309
Módulos
É possível importar diretamente as funções de um modulo:
Figura 89: Importando a sequência de Fibonacci
ALVES, K.S.T.R. Programação em Python 136 / 309
Módulos
É possível importar todas as funções de um módulo sem especificar os
nomes (não importa nomes que iniciam com um sublinhado (_)):
Figura 90: Importando a sequência de Fibonacci
ALVES, K.S.T.R. Programação em Python 137 / 309
Módulos
É possível criar uma nome para os módulos importados usando as,
visando facilitar a programação:
Figura 91: Importando a sequência de Fibonacci
ALVES, K.S.T.R. Programação em Python 138 / 309
Módulos
Para adicionar momentaneamente um caminho à lista de modulos,
usamos o seguinte comando:
Figura 92: Adicionando caminho
ALVES, K.S.T.R. Programação em Python 139 / 309
Módulos
A função embutida dir() é usada para descobrir quais nomes
(variáveis, módulos, funções, etc) são definidos por um módulo:
Figura 93: Nomes definidos
ALVES, K.S.T.R. Programação em Python 140 / 309
Módulos
Sem argumentos, dir() lista os nomes atualmente definidos:
Figura 94: Nomes definidos
ALVES, K.S.T.R. Programação em Python 141 / 309
Módulos
A função dir() não lista os nomes de variáveis e funções embutidas.
Esta lista está disponível no módulo padrão builtins:
Figura 95: Nomes definidos
ALVES, K.S.T.R. Programação em Python 142 / 309
Seção:
1 Introdução ao Python
2 Ferramentas de Controle de Fluxo3 Estruturas de Dados
4 Módulos
5 Entrada e Saída
6 Erros e Exceções
7 Classes
8 Bibliotecas Padrão
9 Ambientes Virtuais e Pacotes
ALVES, K.S.T.R. Programação em Python 143 / 309
Entrada e Saída
Existem várias maneiras de apresentar a saída de um programa; os
dados podem ser exibidos em forma legível para seres humanos, ou
escritos em arquivos para uso posterior
Até agora vimos duas maneiras de exibir valores: expressões e a
função print()
Muitas vezes se deseja mais controle sobre a formatação da saída do
que simplesmente exibir valores separados por espaço
Veremos algumas formas de formatar as saídas
ALVES, K.S.T.R. Programação em Python 144 / 309
Entrada e Saída
Para usar strings literais formatadas, comece uma string com f ou F,
antes de abrir as aspas ou aspas triplas. Dentro dessa string, pode-se
escrever uma expressão Python entre caracteres { conteúdo }, que
podem se referir a variáveis, ou valores literais:
Figura 96: Formatação de saídas
ALVES, K.S.T.R. Programação em Python 145 / 309
Entrada e Saída
O método de strings str.format() requer mais esforço manual. Ainda
será necessário usar { conteúdo } para marcar onde a variável será
substituída e pode-se incluir diretivas de formatação detalhadas, mas
também precisará incluir a informação a ser formatada. O 9 (o
símbolo de menos não faz diferença) significa 9 espaçoes antes do
número e o 2.2 significa dois espaços e duas casas decimais:
Figura 97: Formatação de saídas
ALVES, K.S.T.R. Programação em Python 146 / 309
Entrada e Saída
Pode-se fazer todo o tratamento da saída usando as operações de
fatiamento e concatenação de strings para criar qualquer layout que se
possa imaginar
O tipo string possui alguns métodos que realizam operações úteis
Quando não é necessário sofisticar a saída, mas apenas exibir algumas
variáveis com propósito de depuração, pode-se converter qualquer
valor para uma string com as funções repr() ou str()
A função str() serve para retornar representações de valores que sejam
legíveis para as pessoas, enquanto repr() é usado para gerar
representações que o interpretador Python consegue ler
ALVES, K.S.T.R. Programação em Python 147 / 309
Entrada e Saída
Para objetos que não têm uma representação adequada para consumo
humano, str() devolve o mesmo valor que repr(). Muitos valores, tal
como números ou estruturas, como listas e dicionários, têm a mesma
representação usando quaisquer das funções. Strings, em particular,
têm duas representações distintas:
Figura 98: Str e repr
ALVES, K.S.T.R. Programação em Python 148 / 309
Entrada e Saída
Strings literais formatadas (também chamadas f-strings) permite
incluir o valor de expressões Python dentro de uma string, prefixando-a
com f ou F, e escrevendo expressões na forma {expression}
Um especificador opcional de formato pode ser incluído após a
expressão. Isso permite maior controle sobre como o valor é
formatado. O exemplo a seguir arredonda pi para três casas decimais:
Figura 99: Formatação de saídas
ALVES, K.S.T.R. Programação em Python 149 / 309
Entrada e Saída
Passando um inteiro após o ’:’ fará com que o campo tenha um
número mínimo de caracteres de largura. Isso é útil para alinhar
colunas. O alinhamento de strings é à esquerda e números à direita:
Figura 100: Formatação de saídas
ALVES, K.S.T.R. Programação em Python 150 / 309
Entrada e Saída
Um uso básico do método str.format() tem esta forma:
Figura 101: Formatação de saídas
As chaves e seus conteúdos (chamados campos de formatação) são
substituídos pelos objetos passados para o método str.format(). Um
número nas chaves pode ser usado para referenciar a posição do
objeto passado no método str.format():
Figura 102: Formatação de saídas
ALVES, K.S.T.R. Programação em Python 151 / 309
Entrada e Saída
Se argumentos nomeados são passados para o método str.format(),
seus valores serão referenciados usando o nome do argumento:
Figura 103: Formatação de saídas
Argumentos posicionais e nomeados podem ser combinados à vontade:
Figura 104: Formatação de saídas
ALVES, K.S.T.R. Programação em Python 152 / 309
Entrada e Saída
Se uma string de formatação é muito longa, e não se deseja quebrá-la,
pode ser bom fazer referência aos valores a serem formatados por
nome, em vez de posição. Isto pode ser feito passando um dicionário
usando colchetes ’[]’ para acessar as chaves:
Figura 105: Formatação de saídas
ALVES, K.S.T.R. Programação em Python 153 / 309
Entrada e Saída
Isto também pode ser feito passando o dicionário como argumento do
método, usando a notação **:
Figura 106: Formatação de saídas
ALVES, K.S.T.R. Programação em Python 154 / 309
Entrada e Saída
Como exemplo, as linhas seguintes produzem um conjunto de colunas
alinhadas, com alguns inteiros e seus quadrados e cubos:
Figura 107: Formatação de saídas
ALVES, K.S.T.R. Programação em Python 155 / 309
Entrada e Saída
Usando o exemplo anterior com algumas modificações, temos:
Figura 108: Formatação de saídas
ALVES, K.S.T.R. Programação em Python 156 / 309
Entrada e Saída
O método str.rjust() justifica uma string à direita, num campo de
tamanho definido, acrescentando espaços à esquerda
De forma similar, os métodos str.ljust(), justifica à esquerda, e
str.center(), para centralizar
ALVES, K.S.T.R. Programação em Python 157 / 309
Entrada e Saída
Aqui está a mesma tabela de quadrados e cubos, formatados
manualmente:
Figura 109: Formatação de saídas
ALVES, K.S.T.R. Programação em Python 158 / 309
Entrada e Saída
Existe ainda o método str.zfill() que preenche uma string numérica
com zeros à esquerda, e sabe lidar com sinais positivos e negativos:
Figura 110: Formatação de saídas
ALVES, K.S.T.R. Programação em Python 159 / 309
Entrada e Saída
O operador % (módulo) também pode ser usado para formatação de
string. Por exemplo:
Figura 111: Formatação de saídas
17 é o número de caracteres escritos
ALVES, K.S.T.R. Programação em Python 160 / 309
Entrada e Saída
A função open() devolve um objeto arquivo, e é frequentemente usada
com dois argumentos - open(nome_do_arquivo, modo):
Figura 112: Manipulando arquivos
ALVES, K.S.T.R. Programação em Python 161 / 309
Entrada e Saída
O primeiro argumento é uma string contendo o nome do arquivo
O segundo argumento é outra string, contendo alguns caracteres que
descrevem o modo como o arquivo será usado:
− ’r’ quando o arquivo será apenas lido
− ’w’ para escrever (se o arquivo já existir seu conteúdo prévio será
apagado)
− ’a’ para abrir o arquivo para adição (qualquer escrita será adicionada ao
final do arquivo)
− ’r+’ abre o arquivo tanto para leitura como para escrita
− ’b’ abre o arquivo em modo binário (os dados são lidos e escritos na
forma de bytes)
O argumento modo é opcional, em caso de omissão será assumido ’r’
ALVES, K.S.T.R. Programação em Python 162 / 309
Entrada e Saída
É uma boa prática usar a palavra-chave with ao lidar com arquivos. A
vantagem é que o arquivo é fechado corretamente após o término de
sua utilização, mesmo que uma exceção seja levantada em algum
momento:
Figura 113: Manipulando arquivos
ALVES, K.S.T.R. Programação em Python 163 / 309
Entrada e Saída
Se você não está usando a palavra reservada with, então você deveria
chamar f.close() para fechar o arquivo e imediatamente liberar
qualquer recurso do sistema usado por ele
* Observação: Não usar f.close() ao chamar f.write() sem usar a palavra
reservada with pode resultar nos argumentos de f.write() não serem
completamente escritos no disco
Depois que um arquivo é fechado, seja por uma instrução with ou
chamando f.close(), as tentativas de usar o arquivo falharão
automaticamente
ALVES, K.S.T.R. Programação em Python 164 / 309
Entrada e Saída
Se o fim do arquivo for atingido, f.read() devolve uma string vazia (”)
Figura 114: Manipulando arquivos
ALVES, K.S.T.R. Programação em Python 165 / 309
Entrada e Saída
O método f.readline() lê uma única linha do arquivo
O caractere de quebra de linha (\n) é mantido ao final da string, e sóé omitido na última linha do arquivo se o arquivo não terminar com
uma quebra de linha
Se f.readline() retorna uma string vazia, então o final do arquivo foi
atingido
Linhas em branco são representadas por um ’\n’
ALVES, K.S.T.R. Programação em Python 166 / 309
Entrada e Saída
Comando para ler uma linha por vez:
Figura 115: Manipulando arquivos
ALVES, K.S.T.R. Programação em Python 167 / 309
Entrada e Saída
Uma maneira alternativa de ler linhas do arquivo é iterar diretamente
pelo objeto arquivo. É eficiente, rápido e resulta em código mais
simples:
Figura 116: Manipulando arquivos
ALVES, K.S.T.R. Programação em Python 168 / 309
Entrada e Saída
Se desejar ler todas as linhas de um arquivo em uma lista, pode-se
usar list(f) ou f.readlines():
Figura 117: Manipulando arquivos
ALVES, K.S.T.R. Programação em Python 169 / 309
Entrada e Saída
f.write(string) escreve o conteúdo de string para o arquivo, retornando
o número de caracteres escritos:
Figura 118: Manipulando arquivos
ALVES, K.S.T.R. Programação em Python 170 / 309
Entrada e Saída
Outros tipos de objetos precisam ser convertidos – seja para uma
string (em modo texto) ou para bytes (em modo binário) – antes de
escrevê-los:
Figura 119: Manipulando arquivos
ALVES, K.S.T.R. Programação em Python 171 / 309
Entrada e Saída
f.tell() informa o numero de espaços em branco antes do texto no
arquivo:
Figura 120: Manipulando arquivos
ALVES, K.S.T.R. Programação em Python 172 / 309
Entrada e Saída
Para mudar a posição, use f.seek(offset, de_onde)
A nova posição é computada pela soma do deslocamento offset a um
ponto de referência especificado pelo argumento de-onde
Se o valor de de_onde é 0,a referência é o início do arquivo, 1
refere-se à posição atual, e 2 refere-se ao fim do arquivo
Este argumento pode ser omitido e o valor padrão é 0, usando o início
do arquivo como referência
ALVES, K.S.T.R. Programação em Python 173 / 309
Entrada e Saída
Figura 121: Manipulando arquivos
ALVES, K.S.T.R. Programação em Python 174 / 309
Entrada e Saída
Ao invés de ter usuários constantemente escrevendo e depurando
código para gravar tipos complicados de dados em arquivos, o Python
permite que se use o popular formato de troca de dados chamado
JSON (JavaScript Object Notation)
O módulo padrão chamado json pode pegar hierarquias de dados em
Python e convertê-las em representações de strings; esse processo é
chamado serialização
Reconstruir os dados estruturados da representação string é chamado
desserialização
ALVES, K.S.T.R. Programação em Python 175 / 309
Entrada e Saída
Figura 122: Usando o json
ALVES, K.S.T.R. Programação em Python 176 / 309
Entrada e Saída
Figura 123: Usando o json
ALVES, K.S.T.R. Programação em Python 177 / 309
Seção:
1 Introdução ao Python
2 Ferramentas de Controle de Fluxo
3 Estruturas de Dados
4 Módulos
5 Entrada e Saída
6 Erros e Exceções
7 Classes
8 Bibliotecas Padrão
9 Ambientes Virtuais e Pacotes
ALVES, K.S.T.R. Programação em Python 178 / 309
Erros e Exceções
Existem pelo menos dois tipos distintos de erros: erros de sintaxe e
exceções
ALVES, K.S.T.R. Programação em Python 179 / 309
Erros e Exceções
Erros de sintaxe, também conhecidos como erros de parse, são
provavelmente os mais frequentes entre aqueles que ainda estão
aprendendo Python:
Figura 124: Erros de sintaxe
ALVES, K.S.T.R. Programação em Python 180 / 309
Erros e Exceções
O parser repete a linha inválida e apresenta uma pequena ‘seta’
apontando para o ponto da linha em que o erro foi detectado
O erro é causado (ou ao menos detectado) pelo símbolo que precede a
seta: no exemplo, o erro foi detectado na função print(), uma vez que
um dois-pontos (’:’) está faltando antes dela
O nome de arquivo e número de linha são exibidos para que você
possa rastrear o erro no texto do script
ALVES, K.S.T.R. Programação em Python 181 / 309
Erros e Exceções
Mesmo que um comando ou expressão estejam sintaticamente
corretos, talvez ocorra um erro na hora de sua execução
Erros detectados durante a execução são chamados exceções e não
são necessariamente fatais
A maioria das exceções não são tratadas pelos programas e acabam
resultando nas seguintes mensagens de erro:
ALVES, K.S.T.R. Programação em Python 182 / 309
Erros e Exceções
Figura 125: Erros de exceção
ALVES, K.S.T.R. Programação em Python 183 / 309
Erros e Exceções
Figura 126: Erros de exceção
ALVES, K.S.T.R. Programação em Python 184 / 309
Erros e Exceções
Figura 127: Erros de exceção
ALVES, K.S.T.R. Programação em Python 185 / 309
Erros e Exceções
A última linha da mensagem de erro indica o que ocasionou o erro
Exceções surgem com diferentes tipos de erro, que é exibido como
parte da mensagem
Os erros apresentados nos exemplos anteriores são: ZeroDivisionError,
NameError e TypeError
O programa informa o nome da exceção e o tipo da exceção embutida
que ocorreu
ALVES, K.S.T.R. Programação em Python 186 / 309
Erros e Exceções
É possível escrever programas que tratam exceções específicas
ALVES, K.S.T.R. Programação em Python 187 / 309
Erros e Exceções
Observe o exemplo seguinte, que pede dados ao usuário até que um
inteiro válido seja fornecido (Ctrl + c interrompe a execução):
Figura 128: Exceções
ALVES, K.S.T.R. Programação em Python 188 / 309
Erros e Exceções
A instrução try funciona da seguinte maneira:
− Primeiramente, a cláusula try (o conjunto de instruções entre as
palavras reservadas try e except ) é executada
− Se nenhuma exceção ocorrer, a cláusula except é ignorada e a execução
da instrução try é finalizada
− Se ocorrer uma exceção durante a execução da cláusula try, as
instruções remanescentes na cláusula são ignoradas. Se o tipo da
exceção ocorrida tiver sido previsto em algum except, então essa
cláusula será executada. Depois disso, a execução do programa
continua
− Se a exceção levantada não foi corresponder a nenhuma exceção listada
na cláusula de exceção, então ela é entregue a uma instrução try mais
externa. Se não existir nenhum tratador previsto para tal exceção,
trata-se de uma exceção não tratada e a execução do programa
termina com uma mensagem de erro
ALVES, K.S.T.R. Programação em Python 189 / 309
Erros e Exceções
Também pode ser utilizado para exibir uma mensagem de erro e então
levantar novamente a exceção (permitindo que o invocador da função
atual também possa tratá-la):
Figura 129: Exceções
ALVES, K.S.T.R. Programação em Python 190 / 309
Erros e Exceções
A construção try . . . except possui uma cláusula else opcional, que
quando presente, deve ser colocada depois de todas as outras
cláusulas. É útil para um código que precisa ser executado se
nenhuma exceção foi levantada. Por exemplo:
Figura 130: Exceções
ALVES, K.S.T.R. Programação em Python 191 / 309
Erros e Exceções
Pode-se também instanciar uma exceção antes de levantá-la e
adicionar qualquer atributo a ela, conforme desejado:
Figura 131: Exceções
ALVES, K.S.T.R. Programação em Python 192 / 309
Erros e Exceções
Além disso, tratadores de exceção são capazes de capturar exceções
que tenham sido levantadas no interior de funções invocadas (mesmo
que indiretamente) na cláusula try. Por exemplo:
Figura 132: Exceções
ALVES, K.S.T.R. Programação em Python 193 / 309
Erros e Exceções
A instrução raise permite ao programador forçar a ocorrência de um
determinado tipo de exceção. Por exemplo:
Figura 133: Exceções
ALVES, K.S.T.R. Programação em Python 194 / 309
Erros e Exceções
O argumento de raise indica a exceção a ser levantada. Esse
argumento deve ser uma instância de exceção ou uma classe de
exceção (uma classe que deriva de Exception). Se uma classe de
exceção for passada, será implicitamente instanciada invocando o seu
construtor sem argumentos:
Figura 134: Exceções
ALVES, K.S.T.R. Programação em Python 195 / 309
Erros e Exceções
Caso você precise determinar se uma exceção foi levantada ou não,
mas não quer manipular o erro, uma forma simples de instrução raise
permite que você levante-a novamente:Figura 135: Exceções
ALVES, K.S.T.R. Programação em Python 196 / 309
Erros e Exceções
O comando raise permite o comando opcional from, Que possibilita o
encadeamento de exceções. Por exemplo:
Figura 136: Exceções
ALVES, K.S.T.R. Programação em Python 197 / 309
Erros e Exceções
O encadeamento de exceções acontece automaticamente quando uma
exceção é gerada dentro de uma seção except ou finally. O
encadeamento de exceções pode ser desativado usando o comando
from None:
Figura 137: Exceções
ALVES, K.S.T.R. Programação em Python 198 / 309
Erros e Exceções
Programas podem definir novos tipos de exceções, através da criação
de uma nova classe
Exceções devem ser derivadas da classe Exception, direta ou
indiretamente.
Classes de exceções podem ser definidas para fazer qualquer coisa que
qualquer outra classe faz, mas em geral são bem simples,
frequentemente oferecendo apenas alguns atributos que fornecem
informações sobre o erro que ocorreu
Ao criar um módulo que pode gerar diversos erros, uma prática
comum é criar uma classe base para as exceções definidas por aquele
módulo, e as classes específicas para cada condição de erro como
subclasses dela, como no exemplo a seguir
ALVES, K.S.T.R. Programação em Python 199 / 309
Erros e Exceções
Figura 138: Exceções
ALVES, K.S.T.R. Programação em Python 200 / 309
Erros e Exceções
A instrução try possui outra cláusula opcional, cuja finalidade é
permitir a implementação de ações de limpeza, que sempre devem ser
executadas independentemente da ocorrência de exceções. Como no
exemplo:
Figura 139: Exceções
ALVES, K.S.T.R. Programação em Python 201 / 309
Erros e Exceções
Se uma cláusula finally estiver presente, a cláusula finally será
executada como a última tarefa antes da conclusão da instrução try.
Os pontos a seguir discutem casos mais complexos quando ocorre uma
exceção:
− Se ocorrer uma exceção durante a execução da cláusula try, a exceção
poderá ser tratada por uma cláusula except. Se a exceção não for
tratada por uma cláusula except, a exceção será gerada novamente
após a execução da cláusula: keyword:!finally
− Uma exceção pode ocorrer durante a execução de uma cláusula except
ou else. Novamente, a exceção é levantada novamente depois que
finally é executado
− Se a instrução try atingir uma instrução break, continue ou return, a
cláusula finally será executada imediatamente antes da execução da
instrução break, continue ou return
− Se uma cláusula finally incluir uma instrução return, o valor retornado
será aquele da instrução return da cláusula finally, não o valor da
instrução return da cláusula try
ALVES, K.S.T.R. Programação em Python 202 / 309
Erros e Exceções
Veja mais exemplos:
Figura 140: Exceções
ALVES, K.S.T.R. Programação em Python 203 / 309
Erros e Exceções
Figura 141: Exceções
ALVES, K.S.T.R. Programação em Python 204 / 309
Erros e Exceções
Alguns objetos definem ações de limpeza padrões para serem
executadas quando o objeto não é mais necessário, independentemente
do sucesso da operação que estava usando o objeto. Veja o exemplo a
seguir, que tenta abrir um arquivo e exibir seu conteúdo na tela:
Figura 142: Exceções
ALVES, K.S.T.R. Programação em Python 205 / 309
Erros e Exceções
O problema com esse código é que ele deixa o arquivo aberto um
período indeterminado depois que o código é executado. Isso não
chega a ser problema em scripts simples, mas pode ser um problema
para grandes aplicações. A palavra reservada with permite que objetos
como arquivos sejam utilizados com a certeza de que sempre serão
corretamente finalizados:
Figura 143: Exceções
ALVES, K.S.T.R. Programação em Python 206 / 309
Erros e Exceções
Depois que a instrução é executada, o arquivo f é sempre fechado,
mesmo se ocorrer um problema durante o processamento das linhas
ALVES, K.S.T.R. Programação em Python 207 / 309
Seção:
1 Introdução ao Python
2 Ferramentas de Controle de Fluxo
3 Estruturas de Dados
4 Módulos
5 Entrada e Saída
6 Erros e Exceções
7 Classes
8 Bibliotecas Padrão
9 Ambientes Virtuais e Pacotes
ALVES, K.S.T.R. Programação em Python 208 / 309
Classes
Classes proporcionam uma forma de organizar dados e funcionalidades
Criar uma nova classe cria um novo “tipo” de objeto, permitindo que
novas “instâncias” desse tipo sejam produzidas
Cada instância da classe pode ter atributos anexados a ela, para
manter seu estado
Instâncias da classe também podem ter métodos (definidos pela
classe) para modificar seu estado
ALVES, K.S.T.R. Programação em Python 209 / 309
Classes
Em comparação com outras linguagens de programação, o mecanismo
de classes de Python introduz a programação orientada a objetos sem
acrescentar muitas novidades de sintaxe ou semântica. É uma mistura
de mecanismos equivalentes encontrados em C++ e Modula-3
As classes em Python oferecem todas as características tradicionais da
programação orientada a objetos:
− o mecanismo de herança permite múltiplas classes base (herança
múltipla)
− uma classe derivada pode sobrescrever quaisquer métodos de uma
classe ancestral
− e um método pode invocar outro método homônimo de uma classe
ancestral
Objetos podem armazenar uma quantidade arbitrária de dados de
qualquer tipo
Assim como acontece com os módulos, as classes fazem parte da
natureza dinâmica de Python: são criadas em tempo de execução, e
podem ser alteradas após sua criação
ALVES, K.S.T.R. Programação em Python 210 / 309
Classes
Usando a terminologia de C++, todos os membros de uma classe,
incluindo dados, são públicos, e todos as funções membro são virtuais
Como em Modula-3, não existem atalhos para referenciar membros do
objeto de dentro dos seus métodos, o método (função definida em
uma classe) é declarado com um primeiro argumento explícito
representando o objeto (instância da classe), que é fornecido
implicitamente pela chamada ao método
Como em Smalltalk, classes são objetos, o que fornece uma semântica
para importar e renomear
Ao contrário de C++ ou Modula-3, tipos pré-definidos podem ser
utilizados como classes base para extensões por herança pelo usuário
Assim também como em C++, a maioria dos operadores (aritméticos,
indexação, etc) podem ser redefinidos por instâncias de classe.
ALVES, K.S.T.R. Programação em Python 211 / 309
Classes
Objetos têm individualidade, e vários nomes podem ser vinculados a
um mesmo objeto. Isso é chamado de apelidamento em outras
linguagens. Geralmente, esta característica não é muito apreciada, e
pode ser ignorada com segurança ao lidar com tipos imutáveis
(números, strings, tuplas)
Entretanto, apelidamento pode ter um efeito surpreendente na
semântica do código Python envolvendo objetos mutáveis, como listas,
dicionários e a maioria dos outros tipos
Isso pode ser usado em benefício do programa, porque os apelidos
funcionam de certa forma como ponteiros. Por exemplo, passar um
objeto como argumento é barato, pois só um ponteiro é passado na
implementação; e se uma função modifica um objeto passado como
argumento, o invocador verá a mudança — isso elimina a necessidade
de ter dois mecanismos de passagem de parâmetros como em Pascal.
ALVES, K.S.T.R. Programação em Python 212 / 309
Classes
Antes de introduzir classes, é preciso falar das regras de escopo em
Python
Definições de classe fazem alguns truques com espaços de nomes
Portanto, primeiro é preciso entender claramente como escopos e
espaços de nomes funcionam, para entender o que está acontecendo
Esse conhecimento é muito útil para qualquer programador Python
avançado
ALVES, K.S.T.R. Programação em Python 213 / 309
Classes
Um espaço de nomes é um mapeamento que associa nomes a objetos
Atualmente, são implementados como dicionários em Python, mas isso
não é perceptível (a não ser pelo desempenho), e pode mudar no
futuro.
Exemplos de espaços de nomes são: o conjunto de nomes
pré-definidos (funções como abs() e as exceções pré-definidas); nomes
globais em um módulo; e nomes locais na invocação de uma função
De certa forma, os atributos de um objeto também formamum espaço
de nomes
O mais importante é saber que não existe nenhuma relação entre
nomes em espaços de nomes distintos
Por exemplo, dois módulos podem definir uma função de nome
maximize sem confusão — usuários dos módulos devem prefixar a
função com o nome do módulo, para evitar colisão.
ALVES, K.S.T.R. Programação em Python 214 / 309
Classes
A propósito, utiliza-se a palavra atributo para qualquer nome depois
de um ponto
Na expressão z.real, por exemplo, real é um atributo do objeto z
Estritamente falando, referências para nomes em módulos são
atributos: na expressão modname.funcname, modname é um objeto
módulo e funcname é um de seus atributos
Neste caso, existe um mapeamento direto entre os atributos de um
módulo e os nomes globais definidos no módulo: eles compartilham o
mesmo espaço de nomes!
Atributos podem ser somente para leitura, ou para leitura e escrita
No segundo caso, é possível atribuir um novo valor ao atributo
Atributos de módulos são passíveis de atribuição: você pode escrever
modname.the_answer = 42. Atributos que aceitam escrita também
podem ser apagados através da instrução del
Por exemplo, del modname.the_answer removerá o atributo
the_answer do objeto referenciado por modname
ALVES, K.S.T.R. Programação em Python 215 / 309
Classes
Espaços de nomes são criados em momentos diferentes e possuem
diferentes ciclos de vida
O espaço de nomes que contém os nomes embutidos é criado quando
o interpretador inicializa, e ele nunca é removido
O espaço de nomes global de um módulo é criado quando a definição
do módulo é lida, e normalmente duram até o término do interpretador
Os comandos executados pela invocação do interpretador, pela leitura
de um script com programa principal, ou executados iterativamente,
são parte do módulo chamado __main__ e, portanto, possuem seu
próprio espaço de nomes
Os nomes embutidos possuem seu próprio espaço de nomes no módulo
chamado builtins
ALVES, K.S.T.R. Programação em Python 216 / 309
Classes
O espaço de nomes local de uma função é criado quando a função é
invocada e é apagado quando a função retorna ou uma exceção não
tratada é levantada na própria função
Na verdade, uma forma melhor de descrever o que realmente acontece
é que o espaço de nomes local é “esquecido” quando a função termina
Naturalmente, cada invocação recursiva de uma função tem seu
próprio espaço de nomes
Um escopo é uma região textual de um programa Python onde um
espaço de nomes é diretamente acessível. Aqui, “diretamente
acessível” significa que uma referência sem um prefixo qualificador
permite o acesso ao nome
ALVES, K.S.T.R. Programação em Python 217 / 309
Classes
Ainda que escopos sejam determinados estaticamente, eles são usados
dinamicamente. A qualquer momento durante a execução, existem 3
ou 4 escopos aninhados cujos espaços de nomes são diretamente
acessíveis:
− o escopo mais interno, que é acessado primeiro, contem os nomes locais
− os escopos das funções que envolvem a função atual, que são acessados
a partir do escopo mais próximo. Contém nomes não-locais e também
não-globais
− o penúltimo escopo contém os nomes globais do módulo atual
− e o escopo mais externo (acessado por último) contém os nomes das
funções embutidas e demais objetos pré-definidos do interpretador
ALVES, K.S.T.R. Programação em Python 218 / 309
Classes
Se um nome é declarado no escopo global, então todas as referências
e atribuições de valores vão diretamente para o escopo intermediário,
que contém os nomes globais do módulo
Para alterar variáveis declaradas fora do escopo mais interno, a
instrução nonlocal pode ser usada; caso contrário, todas essas
variáveis serão apenas para leitura (a tentativa de atribuir valores a
essas variáveis simplesmente criará uma nova variável local, no escopo
interno, não alterando nada na variável de nome idêntico fora dele)
Normalmente, o escopo local referencia os nomes locais da função
corrente no texto do programa
Fora de funções, o escopo local referencia os nomes do escopo global:
espaço de nomes do módulo
Definições de classes adicionam um outro espaço de nomes ao escopo
local
ALVES, K.S.T.R. Programação em Python 219 / 309
Classes
É importante perceber que escopos são determinados estaticamente,
pelo texto do código-fonte: o escopo global de uma função definida
em um módulo é o espaço de nomes deste módulo, sem importar de
onde ou por qual apelido a função é invocada
Por outro lado, a busca de nomes é dinâmica, ocorrendo durante a
execução
Entretanto, a evolução da linguagem está caminhando para uma
resolução de nomes estática, em “tempo de compilação”, portanto não
conte com a resolução dinâmica de nomes!
De fato, variáveis locais já são resolvidas estaticamente
ALVES, K.S.T.R. Programação em Python 220 / 309
Classes
Uma peculiaridade especial do Python é que, se nenhuma instrução
global ou nonlocal estiver em vigor, as atribuições de nomes sempre
entram no escopo mais interno
As atribuições não copiam dados, elas apenas vinculam nomes aos
objetos
O mesmo vale para exclusões: a instrução del x remove a ligação de x
do espaço de nomes referenciado pelo escopo local
Todas as operações que introduzem novos nomes usam o escopo local.
Em particular, instruções import e definições de funções ligam o
módulo ou o nome da função ao escopo local
A instrução global pode ser usada para indicar que certas variáveis
residem no escopo global ao invés do local
A instrução nonlocal indica que variáveis particulares estão em um
espoco mais interno e devem ser recuperadas lá
ALVES, K.S.T.R. Programação em Python 221 / 309
Classes
O exemplo a seguir demonstra como se referir aos diferentes escopos e
aos espaços de nomes, e como global e nonlocal pode afetar ligação
entre as variáveis:
ALVES, K.S.T.R. Programação em Python 222 / 309
Classes
Figura 144: Funções com variáveis locais, não-locais e globais
ALVES, K.S.T.R. Programação em Python 223 / 309
Classes
Observe como uma atribuição local (que é o padrão) não altera o
vínculo de scope_test a spam
A instrução nonlocal mudou o vínculo de scope_test de spam e a
atribuição global alterou a ligação para o nível do módulo
Você também pode ver que não havia nenhuma ligação anterior para
spam antes da atribuição global
ALVES, K.S.T.R. Programação em Python 224 / 309
Classes
Definições de classe, assim como definições de função,precisam ser
executadas antes que tenham qualquer efeito
É possível colocar uma definição de classe dentro do teste condicional
de um if ou dentro de uma função
Na prática, as instruções dentro da definição de classe geralmente
serão definições de funções
Definições de funções dentro da classe normalmente têm um forma
peculiar de lista de argumentos, determinada pela convenção de
chamada a métodos
ALVES, K.S.T.R. Programação em Python 225 / 309
Classes
Quando se inicia a definição de classe, um novo espaço de nomes é
criado e usado como escopo local
Em particular, funções definidas aqui são vinculadas a nomes nesse
escopo
Quando uma definição de classe é finalizada normalmente, um objeto
classe é criado. Este objeto encapsula o conteúdo do espaço de nomes
criado pela definição da classe
O escopo local que estava vigente antes da definição da classe é
reativado, e o objeto classe é vinculado ao identificador da classe nesse
escopo
ALVES, K.S.T.R. Programação em Python 226 / 309
Classes
Objetos classe suportam dois tipos de operações: referências a
atributos e instanciação
Referências a atributos de classe utilizam a sintaxe padrão para
quaisquer referências a atributos em Python: obj.nome
Nomes de atributos válidos são todos os nomes presentes dentro do
espaço de nomes da classe quando o objeto classe foi criado
ALVES, K.S.T.R. Programação em Python 227 / 309
Classes
No exemplo a seguir, temos que MyClass.i e MyClass.f são referências
válidas a atributos retornando, respectivamente, um inteiro e um
objeto função. Atributos de classe podem receber valores. É possível
modificar o valor de MyClass.i numa atribuição. __doc__ também é
um atributoválido da classe, retornando a documentação associada:
"A simple example class".
Figura 145: Uma classe simples
ALVES, K.S.T.R. Programação em Python 228 / 309
Classes
Para instanciar uma classe, usa-se a mesma sintaxe usada para invocar
uma função. Definindo uma nova instância de classe é definido um
objeto que contém todos os atributos da classe que o originou.
Considerando a classe definida anteriormente, temos:
Figura 146: Instanciando classes
ALVES, K.S.T.R. Programação em Python 229 / 309
Classes
A operação de instanciação cria um objeto vazio
Muitas classes preferem criar novos objetos com um estado inicial
predeterminado. Para tanto, a classe pode definir um método especial
chamado __init__()
Quando uma classe define um método __init__(), o processo de
instanciação automaticamente invoca __init__() sobre a instância
recém criada
ALVES, K.S.T.R. Programação em Python 230 / 309
Classes
Naturalmente, o método __init__() pode ter parâmetros para maior
flexibilidade. Neste caso, os argumentos fornecidos na invocação da
classe serão passados para o método __init__(). Por exemplo:
Figura 147: Instanciando classes
ALVES, K.S.T.R. Programação em Python 231 / 309
Classes
Atributos de dados não precisam ser declarados. Assim como variáveis
locais, eles passam a existir na primeira vez em que é feita uma
atribuição:
Figura 148: Propriedades das classes
ALVES, K.S.T.R. Programação em Python 232 / 309
Classes
Normalmente, um método é chamado imediatamente após ser
referenciado. No entanto, ele pode ser atribuído a uma variável e
invocado depois:
Figura 149: Propriedades das classes
ALVES, K.S.T.R. Programação em Python 233 / 309
Classes
Variáveis de instância são variáveis que indicam dados que são únicos
a cada instância individual
Variáveis de classe são variáveis de atributos e de métodos que são
comuns a todas as instâncias de uma classe
ALVES, K.S.T.R. Programação em Python 234 / 309
Classes
Figura 150: Propriedades das classes
ALVES, K.S.T.R. Programação em Python 235 / 309
Classes
Dados compartilhados podem causar efeitos inesperados quando
envolvem objetos (mutáveis), como listas ou dicionários.
Por exemplo, a lista tricks do código a seguir não deve ser usada como
variável de classe, pois assim seria compartilhada por todas as
instâncias de Dog:
ALVES, K.S.T.R. Programação em Python 236 / 309
Classes
Figura 151: Propriedades das classes
ALVES, K.S.T.R. Programação em Python 237 / 309
Classes
Em vez disso, o modelo correto da classe deve usar uma variável de
instância, como mostrado no próximo exemplo:
ALVES, K.S.T.R. Programação em Python 238 / 309
Classes
Figura 152: Propriedades das classes
ALVES, K.S.T.R. Programação em Python 239 / 309
Classes
Se um mesmo nome de atributo ocorre tanto na instância quanto na
classe, a busca pelo atributo prioriza a instância:
Figura 153: Propriedades das classes
ALVES, K.S.T.R. Programação em Python 240 / 309
Classes
Não é necessário que a definição da função esteja textualmente
embutida na definição da classe, por exemplo:
Figura 154: Propriedades das classes
ALVES, K.S.T.R. Programação em Python 241 / 309
Classes
Métodos podem invocar outros métodos usando atributos de método
do argumento self:
Figura 155: Propriedades das classes
ALVES, K.S.T.R. Programação em Python 242 / 309
Classes
Herança é um princípio de orientação a objetos que permite que
classes compartilhem atributos e métodos
Ela é usada tanto para reaproveitar um código ou um comportamento
generalizado, como também para especializar operações ou atributos
Se um atributo requisitado não for encontrado na classe, ele é
procurado na classe base. Essa regra é aplicada recursivamente se a
classe base por sua vez for derivada de outra
Classes derivadas podem sobrescrever métodos das suas classes base
Existe uma maneira simples de chamar diretamente o método da classe
base: apenas chame BaseClassName.methodname(self, arguments)
ALVES, K.S.T.R. Programação em Python 243 / 309
Classes
Python também suporta uma forma de herança múltipla
O conceito de herança de várias classes é conhecido como herança
múltipla
Para a maioria dos casos mais simples a pesquisa de atributos
herdados de uma classe pai ocorre no primeiro nível de profundidade
da esquerda para a direita
ALVES, K.S.T.R. Programação em Python 244 / 309
Classes
Usando classe para iterar objetos
Figura 156: Iterando objetos
ALVES, K.S.T.R. Programação em Python 245 / 309
Classes
Pode-se usar laços for com a maioria das coleções em Python:
Figura 157: Iteradores
ALVES, K.S.T.R. Programação em Python 246 / 309
Classes
Geradores (o yield possibilitará o retorno de cada resultado da
iteração):
Figura 158: Geradores
ALVES, K.S.T.R. Programação em Python 247 / 309
Classes
Geradores:
Figura 159: Geradores
ALVES, K.S.T.R. Programação em Python 248 / 309
Seção:
1 Introdução ao Python
2 Ferramentas de Controle de Fluxo
3 Estruturas de Dados
4 Módulos
5 Entrada e Saída
6 Erros e Exceções
7 Classes
8 Bibliotecas Padrão
9 Ambientes Virtuais e Pacotes
ALVES, K.S.T.R. Programação em Python 249 / 309
Bibliotecas Padrão
Python acompanha uma série de bibliotecas nativas. Veja agumas
delas a seguir:
ALVES, K.S.T.R. Programação em Python 250 / 309
Bibliotecas Padrão
O módulo os fornece várias funções para interagir com o sistema
operacional:
Figura 160: os
ALVES, K.S.T.R. Programação em Python 251 / 309
Bibliotecas Padrão
As funções embutidas dir() e help() são úteis como um sistema de
ajuda interativa para lidar com módulos grandes como o os
ALVES, K.S.T.R. Programação em Python 252 / 309
Bibliotecas Padrão
O módulo glob fornece uma função para criar listas de arquivos a
partir de buscas em diretórios usando caracteres curinga:
Figura 161: os
ALVES, K.S.T.R. Programação em Python 253 / 309
Bibliotecas Padrão
O módulo re fornece ferramentas para lidar com processamento de
strings através de expressões regulares:
Figura 162: re
ALVES, K.S.T.R. Programação em Python 254 / 309
Bibliotecas Padrão
O módulo math oferece acesso às funções da biblioteca C para
aritmética de ponto flutuante:
Figura 163: math
ALVES, K.S.T.R. Programação em Python 255 / 309
Bibliotecas Padrão
O módulo random fornece ferramentas para gerar seleções aleatórias:
Figura 164: random
ALVES, K.S.T.R. Programação em Python 256 / 309
Bibliotecas Padrão
O módulo statistics calcula as propriedades estatísticas básicas (a
média, a mediana, a variância, etc.) de dados numéricos:
Figura 165: statistics
ALVES, K.S.T.R. Programação em Python 257 / 309
Bibliotecas Padrão
O módulo datetime fornece classes para manipulação de datas e
horas:
Figura 166: date
ALVES, K.S.T.R. Programação em Python 258 / 309
Bibliotecas Padrão
Datas suportam aritmética de calendário:
Figura 167: date
ALVES, K.S.T.R. Programação em Python 259 / 309
Bibliotecas Padrão
Formatos comuns de arquivamento e compressão de dados estão
disponíveis diretamente através de alguns módulos, entre eles: zlib,
gzip, bz2, lzma, zipfile and tarfile:
Figura 168: zlib
ALVES, K.S.T.R. Programação em Python 260 / 309
Bibliotecas Padrão
O módulo pprint oferece um controle mais sofisticado na exibição
tanto de objetos embutidos quanto aqueles criados pelo usuário de
maneira que fique legível para o interpretador. Quando o resultado é
maior que uma linha, o “pretty printer” acrescenta quebras de linha e
indentação para revelar as estruturas de maneira mais clara:
Figura 169: pprint
ALVES, K.S.T.R. Programação em Python 261 / 309
Bibliotecas Padrão
O módulo textwrap formata parágrafos de texto para que caibam em
uma dada largura de tela:
Figura 170: textwrap
ALVES, K.S.T.R. Programação em Python 262 / 309
Bibliotecas Padrão
O módulo string inclui a versátil classe Template com uma sintaxe
simplificada, adequada para ser editada por usuários finais
Isso permite que usuários personalizem suas aplicações sem a
necessidade de alterar a aplicação
Em um templatesão colocadas marcações indicando o local onde o
texto variável deve ser inserido
Uma marcação é formada por $ seguido de um identificador Python
válido (caracteres alfanuméricos e underscores). Envolvendo-se o
identificador da marcação entre chaves, permite que ele seja seguido
por mais caracteres alfanuméricos sem a necessidade de espaços.
Escrevendo-se $$ cria-se um único $
ALVES, K.S.T.R. Programação em Python 263 / 309
Bibliotecas Padrão
Figura 171: Template
ALVES, K.S.T.R. Programação em Python 264 / 309
Bibliotecas Padrão
O método substitute() levanta uma exceção KeyError quando o
identificador de uma marcação não é fornecido em um dicionário ou
em um argumento nomeado (keyword argument). Para aplicações que
podem receber dados incompletos fornecidos pelo usuário, o método
safe_substitute() pode ser mais apropriado — deixará os marcadores
intactos se os dados estiverem faltando:
Figura 172: Template
ALVES, K.S.T.R. Programação em Python 265 / 309
Seção:
1 Introdução ao Python
2 Ferramentas de Controle de Fluxo
3 Estruturas de Dados
4 Módulos
5 Entrada e Saída
6 Erros e Exceções
7 Classes
8 Bibliotecas Padrão
9 Ambientes Virtuais e Pacotes
ALVES, K.S.T.R. Programação em Python 266 / 309
Ambientes Virtuais e Pacotes
Aplicações em Python normalmente usam pacotes e módulos que não
vêm como parte da instalação padrão. Aplicações às vezes necessitam
uma versão específica de uma biblioteca, porque um código em
particular ter sido escrito utilizando uma versão obsoleta da interface
da biblioteca
Isso significa que talvez não seja possível que uma instalação Python
preencha os requisitos de qualquer aplicação. Se uma aplicação A
necessita a versão 1.0 de um módulo particular mas a aplicação B
necessita a versão 2.0, os requisitos entrarão em conflito, e instalar
qualquer uma das duas versões 1.0 ou 2.0 fará com que uma das
aplicações não consiga executar
ALVES, K.S.T.R. Programação em Python 267 / 309
Ambientes Virtuais e Pacotes
A solução para este problema é criar um ambiente virtual, que é uma
árvore de diretórios que contém uma versão específica do Python além
de uma série de pacotes adicionais
Diferentes aplicações podem então usar diferentes ambientes virtuais.
Para resolver o exemplo anterior de requisitos conflitantes, a aplicação
A deve ter seu próprio ambiente virtual com a versão 1.0 instalada
enquanto que a aplicação B vai possuir outro ambiente virtual com a
versão 2.0. Se a aplicação B precisar fazer uma atualização para a
versão 3.0, isso não afetará o ambiente da aplicação A
ALVES, K.S.T.R. Programação em Python 268 / 309
Ambientes Virtuais e Pacotes
Adicionando o caminho Python ao Windows:
Figura 173: Criando Ambientes Virtuais
ALVES, K.S.T.R. Programação em Python 269 / 309
Ambientes Virtuais e Pacotes
Adicionando o caminho Python ao Windows:
Figura 174: Criando Ambientes Virtuais
ALVES, K.S.T.R. Programação em Python 270 / 309
Ambientes Virtuais e Pacotes
Adicionando o caminho Python ao Windows:
Figura 175: Criando Ambientes Virtuais
ALVES, K.S.T.R. Programação em Python 271 / 309
Ambientes Virtuais e Pacotes
Encontrando o caminho Python:
Figura 176: Criando Ambientes Virtuais
ALVES, K.S.T.R. Programação em Python 272 / 309
Ambientes Virtuais e Pacotes
Encontrando o caminho Python:
Figura 177: Criando Ambientes Virtuais
ALVES, K.S.T.R. Programação em Python 273 / 309
Ambientes Virtuais e Pacotes
Adicionando os caminhos:
Figura 178: Criando Ambientes Virtuais
ALVES, K.S.T.R. Programação em Python 274 / 309
Ambientes Virtuais e Pacotes
Testando:
Figura 179: Criando Ambientes Virtuais
ALVES, K.S.T.R. Programação em Python 275 / 309
Ambientes Virtuais e Pacotes
Selecionando a pasta:
Figura 180: Criando Ambientes Virtuais
ALVES, K.S.T.R. Programação em Python 276 / 309
Ambientes Virtuais e Pacotes
Crindo o ambiente virtual:
Figura 181: Criando Ambientes Virtuais
ALVES, K.S.T.R. Programação em Python 277 / 309
Ambientes Virtuais e Pacotes
Entrando no ambiente virtual criado:
Figura 182: Criando Ambientes Virtuais
ALVES, K.S.T.R. Programação em Python 278 / 309
Ambientes Virtuais e Pacotes
Instalando o requests:
Figura 183: Criando Ambientes Virtuais
ALVES, K.S.T.R. Programação em Python 279 / 309
Ambientes Virtuais e Pacotes
Executando o arquivo Version.py:
Figura 184: Criando Ambientes Virtuais
ALVES, K.S.T.R. Programação em Python 280 / 309
Ambientes Virtuais e Pacotes
Saindo do ambiente virtual:
Figura 185: Criando Ambientes Virtuais
ALVES, K.S.T.R. Programação em Python 281 / 309
Ambientes Virtuais e Pacotes
Criando um segundo ambiente usando comandos nativos do Python:
ALVES, K.S.T.R. Programação em Python 282 / 309
Ambientes Virtuais e Pacotes
Selecionando a pasta:
Figura 186: Criando Ambientes Virtuais
ALVES, K.S.T.R. Programação em Python 283 / 309
Ambientes Virtuais e Pacotes
Crindo o ambiente virtual:
Figura 187: Criando Ambientes Virtuais
ALVES, K.S.T.R. Programação em Python 284 / 309
Ambientes Virtuais e Pacotes
Entrando no ambiente virtual criado:
Figura 188: Criando Ambientes Virtuais
ALVES, K.S.T.R. Programação em Python 285 / 309
Ambientes Virtuais e Pacotes
Executando o arquivo Version.py:
Figura 189: Criando Ambientes Virtuais
ALVES, K.S.T.R. Programação em Python 286 / 309
Ambientes Virtuais e Pacotes
Saindo do ambiente virtual:
Figura 190: Criando Ambientes Virtuais
ALVES, K.S.T.R. Programação em Python 287 / 309
Ambientes Virtuais e Pacotes
Instalando a última versão de pacotes:
Figura 191: pip install
ALVES, K.S.T.R. Programação em Python 288 / 309
Ambientes Virtuais e Pacotes
Instalando uma versão específica de pacotes:
Figura 192: pip install
ALVES, K.S.T.R. Programação em Python 289 / 309
Ambientes Virtuais e Pacotes
Atualizando pacotes:
Figura 193: pip install
ALVES, K.S.T.R. Programação em Python 290 / 309
Ambientes Virtuais e Pacotes
Desinstalando pacotes:
Figura 194: pip uninstall
ALVES, K.S.T.R. Programação em Python 291 / 309
Ambientes Virtuais e Pacotes
pip show irá mostrar informações sobre um pacote em particular:
Figura 195: pip show
ALVES, K.S.T.R. Programação em Python 292 / 309
Ambientes Virtuais e Pacotes
pip list irá mostrar todos os pacotes instalados:
Figura 196: pip list
ALVES, K.S.T.R. Programação em Python 293 / 309
Ambientes Virtuais e Pacotes
Instalando versões anteriores do Anaconda:
Figura 197: conda list -r
ALVES, K.S.T.R. Programação em Python 294 / 309
Ambientes Virtuais e Pacotes
Instalando versões anteriores do Anaconda:
Figura 198: conda install –revision
ALVES, K.S.T.R. Programação em Python 295 / 309
Ambientes Virtuais e Pacotes
Solucionando problemas de inconsistência:
Figura 199: conda update –force conda
ALVES, K.S.T.R. Programação em Python 296 / 309
Ambientes Virtuais e Pacotes
Solucionando problemas de inconsistência:
Figura 200: conda install
ALVES, K.S.T.R. Programação em Python 297 / 309
Ambientes Virtuais e Pacotes
Instalando ambientes virtuais com Anaconda:
Figura 201: conda create
ALVES, K.S.T.R. Programação em Python 298 / 309
Ambientes Virtuais e Pacotes
Confirmar instalação de modulos:
Figura 202: Confirmação
ALVES, K.S.T.R. Programação em Python 299 / 309
Ambientes Virtuais e Pacotes
Instrução para ativar e desativar o ambiente virtual:
Figura 203: Intruções
ALVES, K.S.T.R. Programação em Python 300 / 309
Ambientes Virtuais e Pacotes
Ativando o ambiente virtual:
Figura 204: activate
ALVES, K.S.T.R. Programação em Python 301 / 309
Ambientes Virtuais e Pacotes
Selecionando a pasta onde está o arquivo python:
Figura 205: cd
ALVES, K.S.T.R. Programação em Python 302 / 309
Ambientes Virtuais e Pacotes
Instalando a biblioteca requests:
Figura 206: pip install
ALVES, K.S.T.R. Programação em Python 303 / 309
Ambientes Virtuais e Pacotes
Executando o script python:
Figura 207: python
ALVES, K.S.T.R. Programação em Python 304 / 309
Ambientes Virtuais e Pacotes
Desativandoo ambiente virtual:
Figura 208: deactivate
ALVES, K.S.T.R. Programação em Python 305 / 309
Ambientes Virtuais e Pacotes
Instalando o ambiente virtual com bibliotecas:
Figura 209: conda create
ALVES, K.S.T.R. Programação em Python 306 / 309
Ambientes Virtuais e Pacotes
Usando o ambiente e encerrando:
Figura 210: activate and deactivate
ALVES, K.S.T.R. Programação em Python 307 / 309
Ambientes Virtuais e Pacotes
Verificando a lista de ambientes virtuais:
Figura 211: conda info
ALVES, K.S.T.R. Programação em Python 308 / 309
Ambientes Virtuais e Pacotes
Removendo ambientes:
Figura 212: conda env remove
ALVES, K.S.T.R. Programação em Python 309 / 309
	Introdução ao Python
	Ferramentas de Controle de Fluxo
	Estruturas de Dados
	Módulos
	Entrada e Saída
	Erros e Exceções
	Classes
	Bibliotecas Padrão
	Ambientes Virtuais e Pacotes

Mais conteúdos dessa disciplina