DA++ +Linguagem+Python++ +Módulo+I
DA++ +Linguagem+Python++ +Módulo+I
DA++ +Linguagem+Python++ +Módulo+I
Configuração do Ambiente
Faça o download do python 3.x para o seu sistema operacional. A distribuição Anaconda é a mais recomendada, pois possui diversas
funcionalidades e já inclui os principais pacotes utilizados por cientistas de dados. Link para download: Anaconda | Anaconda Distributi
on
Após fazer o download, siga as instruções para instalação neste link: Installation — Anaconda documentation
1 python --version
Se a instalação foi bem-sucedida, você deve ver a seguinte mensagem (Dependendo da versão que foi instalada):
A partir deste ponto, o interpretador está instalado e pronto para ser utilizado.
2 - Instalando Pacotes
Novos pacotes podem ser instalados facilmente no ambiente que está ativo no momento utilizando o comando pip. Portanto, para instalar
um pacote, basta executar pip install <nomeDoPacote> no terminal, conforme apresenta o comando abaixo, que instala a biblioteca
matplotlib.
1 pip list
1 jupyter notebook
Após executar este comando, o Jupyter deve abrir no navegador padrão, então é só seguir as instruções para criar e editar notebooks.
Se você tem notebooks salvos que deseja abrir, basta navegar para o diretório onde estão os notebooks e executar o Jupyter a partir deste
diretório.
Introdução
Popularidade
E no mercado de trabalho, este cenário não é diferente. Boa parte das pesquisas apresenta a linguagem Python dentre as primeiras
posições.
Fonte: Top Programming Languages 2022 - IEEE Spectrum
O que é Python?
Diferenciais do Python
Utilizando o terminal, podemos executar um programa Python contido em um arquivo de nome hello_world.py por meio do seguinte
comando:
1 python hello_world.py
Jupyter Notebooks
NoneType , como um tipo de valor único ( None ), para representar a ausência de quaisquer outros valores
Conversões de tipos
Tipos básicos de Python possuem uma variedade de operações de conversão de tipo. Realizamos as conversões chamando funções
específicas, que recebem um valor de parâmetro e o retornam no tipo almejado.
int(p) converterá p para inteiro
i%j representa o resto da divisão inteira de i e j (então o resultado será sempre int)
De forma similar, estes tipos possuem os operadores comparativos:
== (igual);
!= (diferente)
> (maior que)
a or b disjunção;
not a negação.
Importação de módulos
Tipicamente um arquivo individual .py representa um módulo que pode ser importado
Por exemplo considere o arquivo circle.py com um conjunto de funções
Podemos acessar as funções de circle.py a partir de outro arquivo usando o comando import circle
Módulos nos permite acessar diversas funções built-in da linguagem, por exemplo no módulo math (usando import math, temos acesso
a diversas funções matemáticas:
math.sin(x) retorna o seno de x
math.sqrt(x) retorna a raiz quadrada de x
1 if Boolean expression:
2
3 block of code
4
5 elif Boolean expression:
6
7 block of code
8
9 else:
10
11 block of code
Por exemplo:
1 if x > 0:
2
3 return x
4
5 elif x < 0:
6
7 return -x
8
9 else:
10
11 return None
block of code
Por exemplo:
1 i = 0
2
3 while i < 10:
4
5 print(i)
6
7 i = i + 1
Iterações (em tipos que suportam iteração) utilizam a palavra reservada for
1 for variable in sequence:
2
3 code block
4
5 Por exemplo
6
7 for i in range(0,10):
8
9 print(i)
Objetos do tipo str (para strings) são declarados tanto com aspas simples 'abs' quanto com aspas duplas "abs"
Possuem diversos operadores:
Exceções
1 successFailureRatio = numSuccesses/float(numFailures)
2
3 print ('The success/failure ratio is', successFailureRatio)
4
5 print ('Now here')
Caso o número de falhas numFailures for 0, teremos uma exceção ZeroDivisionError e nenhum print ocorrerá tratando a exceção, teremos
o código
1 try:
2
3 successFailureRatio = numSuccesses/float(numFailures)
4
5 print('The success/failure ratio is', successFailureRatio)
6
7 except ZeroDivisionError:
8
9 print('No failures so the success/failure ratio is undefined.')
10
11 print 'Now here'
Contêineres em Python
Listas
Listas são sequências ordenadas de valores onde cada valor é identificado por um índice
Uma lista é denotada por colchetes, []
Listas contém elementos:
Listas
No console: [1, 7, 3, 5]
No hardware:
Quando se faz extend acrescenta-se uma cópia dos elementos de uma lista na outra lista
Listas: iteração
1 total = 0
2
3 for i in range(len(L)):
4
5 total += L[i]
6
7 print total
8
9 O código acima é equivalente a:
10
11 total = 0
12
13 for i in L:
14
15 total += i
16
17 print total
Note que:
os elementos são indexados de00até len(L)-1
Listas: indexação
A indexação linear (para os contêineres que a suportam) em Python possui algumas particularidades:
Aceita 3 parâmetros
Ponto de início (inclusivo)
Ponto de fim (exclusivo)
Passo
Listas: slicing
1 nums = list(range(5))
2
3 print(nums)
4
5 print(nums[:]) # do início ao fim
6
7 print(nums[2:]) # do 2o (incluso) até o fim
8
9 print(nums[:2]) # do início ao 2o (excluso)
10
11 print(nums[2:4]) # do 2o (incluso) ao 4o (excluso)
12
13 print(nums[:-1]) # do início ao último (excluso)
14
15 nums[2:4] = [8, 9] # atribuição
16
17 print(nums)
Listas: construção com list comprehension
List Comprehension (compreensão de lista) é um mecanismo conciso de aplicar uma operação nos valores de uma lista
O comando for na compreensão pode ser seguido de um ou mais comandos if para filtrar o conteúdo da lista
Aplicará a potência quadrática apenas nos números inteiros, resultando na lista [1, 4, 9]
Listas: map
Listas: métodos
Tuplas
1 Prod1 = (10,”Banana”,1.5)
2
3 Prod2 = (22,”Maca”,4.5)
1 P1 = (101,22)
2
3 P2 = (-3,18)
São imutáveis
Uma vez criados, não podem ser estendidos, reduzidos ou alterados
Similares a strings
Preste atenção:
Tuplas: zip
Por exemplo
x = [1, 2, 3]
y = [4, 5, 6]
Tuplas: enumerate
enumerate permite iterar sobre uma coleção mantendo uma variável com a contagem de elementos vistos até agora
Esta contagem corresponde ao índice de coleções sequenciais (e.g. strings, listas e tuplas)
Por exemplo:
Conjuntos
s.difference(t) (equivalente a s - t) gera um novo conjunto com os elementos de s que não estão em t
s.symmetric_difference(t) (equivalente a s ^ t) gera um novo conjunto com elementos em s ou t que não estão em ambos
Dicionários
Dicionários são estruturas de dados indexadas indiretamente utilizando chaves no lugar de índices numéricos
Dicionários implementam tabelas hash (hash tables)
Indexação utiliza uma função hash que converte valores de tipos arbitrários para um índice numérico (idealmente único)
Todos os objetos em Python implementam uma função de hash padrão no método __hash__(self)
Contêineres: resumo
de dados;
Itertools
Iteradores infinitos:
Leitura recomendada
Funções em Python
Decomposição
Cria uma estrutura
Abstração
Esconde detalhes
Permite usar trecho de código como “caixa-preta”
Declaração de Funções
1 def function():
2
3 pass
Parâmetros
Exemplo de sintaxe
Tipos de parâmetros
Posicionais:
A ordem dos parâmetros reais deve ser a mesma dos parâmetros formais
printName(sobrenome="da Silva",nome="José")
Default:
Se você não souber quantos parâmetros uma função receberá, utilize *args para denotar este comportamento:
Na função abaixo: args codifica uma lista de parâmetros sem nome que foram passados para a função
1 def func(*args):
2
3 for item in args:
4
5 print(item)
Se você não souber quantos parâmetros uma função receberá, mas apenas que eles devem ser nomeados, utilize **kwargs:
kwargs codifica um dicionário, onde a chave é o nome do parâmetro
1 def func(**kwargs):
2
3 for key, value in kwargs.items():
4
5 print(key, value)
Desenrolando dicionários em parâmetros nomeados
Tipos de retorno
Python permite que uma função retorne vários objetos de apenas uma vez. Por exemplo
1 a = [1, 2, 3]
2
3 b, c, d = a
4
5 print(b, c d)
Verificação de tipos
1 def func(param):
2
3 if isinstance(param, list):
4
5 print('list')
6
7 else:
8
9 print(type(param))
Documentação de funções
Definem um contrato entre o programador que escreve a função e os programadores que irão usar a função em seus programas
Pós condições (garantias): asserções que o desenvolvedor da função garante que serão verdadeiras após a execução da função
Referência para funções
Funções λ (lambda)
Geralmente são usadas em um escopo muito curto e restrito, como a chamada de uma função
Podem ser atribuídas a variáveis:
Módulos
Exemplo
Módulo em circulo.py
1 pi = 3.14159
2
3 def area(raio):
4 return pi*(raio**2)
5
6 def perimetro(raio):
7 return 2*pi*raio
8
9 def superficie(raio):
10 return 4.0*area(raio)
11
12 def volume(raio):
13 return(4.0/3.0)*pi*(raio**3)
Uso do módulo
1 import circulo as cr
2 from ciruculo import perimetro
3
4 raio = float(input("Digite o raio do circulo: "))
5
6 print("Area do circulo:", cr.area(raio))
7 print("perímetro do circulo:", perimetro(raio))
8 print("Volume da esfera:", cr.volume(raio))
Definição de módulos
Especificar o nome do módulo como o nome da pasta que conterá os arquivos de código
Por exemplo, treelib
Colocar um arquivo __init__.py dentro desta pasta
Este arquivo contém as instruções iniciais que devem ser executadas assim que um módulo é importado. Se nenhuma instrução for
necessária, ele pode ficar em branco
Colocar os outros arquivos de código fonte nesta pasta
Arquivos
Cria arquivo:
1 import random
2
3 arq = open("numeros.txt", "w")
4 for i in range(0, 100):
5 val = random.random()
6 arq.write(str(val) + "\n")
7
8 print("Arquivo criado")
9 arq.close()
Lê arquivo:
Ou ainda:
Introdução
Declaração:
Utilização:
Construtor
A comunidade Python recomenda, para fins de clareza, que todos os atributos de uma classe sejam declarados e instanciados em seu
construtor:
Getters e setters
Declaração:
Utilização:
Destrutores
Declaração:
Utilização:
E se eu quiser...
[1] Um método é dito final quando não pode ser sobrescrito por nenhuma classe descendente
O underline _ (um para atributos, dois para métodos) notifica outros programadores que aquele método/atributo não deve ser acessado
por eles, e que se o fizerem, resultará em um comportamento inesperado
Isso é um padrão da comunidade Python (não é enforcado pelos interpretadores)
O principal motivo para isto é a falta de fé em métodos 100% seguros
Métodos estáticos
Declaração:
Instanciação:
Métodos de classe
Métodos de classe são voltados a instanciar objetos a partir de outros métodos que não os construtores
Atributos declarados na classe são comuns a todas as instâncias. Considere esse o valor default para o atributo year:
Métodos de classe
Em Python, não existe sobrecarga de métodos a nível da mesma classe (apenas classes descendentes podem sobrescrever métodos
das classes pai)
também pode ser chamado de polimorfismo
Portanto, métodos de classe são importantes para tratar diversos tipos de dados
Mais sobre métodos estáticos e métodos de classe neste link
Métodos de classe
Para que atributos de uma classe possuam valores default, declare-os no corpo da classe:
Herança múltipla
Python não restringe herança múltipla como outras linguagens de programação podem fazer:
Sobrescrita de métodos
Sobrecarga de operadores
+-/*
< > >= <= == !=
Declaração:
Sobrecarga de operadores
Instanciação:
Leitura recomendada
Exercícios – Parte 2
Referências
Básica
1. Zed A. Shaw. Learn Python 3 the Hard Way: A Very Simple Introduction to the Terrifyingly Beautiful World of Computers and Code.
Addison Wesley, 2017. 320p.
Complementar
1. WICKHAM, H.; GROLEMUND, G. R for Data Science. ist ed., O'Reilly, 2017.
2. FACELI, K., LORENA, A.C., GAMA, J., CARVALHO, A.C.P.L.F. Inteligência Artificial: Uma Abordagem de Aprendizado de Máquina. Rio
de Janeiro: LTC, 2011. 378 p.
3. SIMON, PI. The visual organization : data visualization, big data, and the quest for better decisions. Hoboken : Wiley, c2014. 202 p.
4. GOODFELLOW, I., BENGIO, Y., COURVILLE, A.. Deep Learning. MIT Press, 775p., 2016.
5. Matthew O. Ward, Georges Grinstein, Daniel Keim, Interactive Data Visualization: Foundations, Techniques, and Applications. A K
Peters/CRC Press, 2010. 513 p.