Python em Outros Paradigmas
Python em Outros Paradigmas
Descrição
Propósito
Preparação
Objetivos
Módulo 1
Módulo 3
Módulo 4
Introdução
Neste tema, veremos a utilização da linguagem Python em outros
paradigmas, como linguagem funcional, computação concorrente,
desenvolvimento Web e ciência de dados.
Visão geral
Introdução
A programação funcional teve seu início no final dos anos 1950, com a
linguagem LISP.
LISP
É uma família de linguagens de programação desenvolvida, em 1958,
por John McCarthy. Ela foi pensada a princípio para o
processamento de dados simbólicos. Ela é uma linguagem formal
matemática.
donut_large As funções devem ser puras, ou seja, em qualquer
ponto do programa, sempre produzem o mesmo
resultado quando passados os mesmos
parâmetros.
Funções puras
Exercício 1
info_outlineTUTORIAL
d content_copyCOPIAR
Python3
1 # script funcao1.py
2 valor = 20
3
4 def multiplica(fator):
5 global valor
6 valor = valor * fator
null
null
play_arrow
Exercício 2
info_outlineTUTORIAL
d content_copyCOPIAR
Python3
1 # script funcao2.py
2 valor = 20
3
4 def multiplica(valor, fator):
5 valor = valor * fator
6 return valor
null
null
play_arrow
funcao1.py
funcao2.py
Dados imutáveis
São aqueles que não podem ser alterados após sua criação. Apesar do
Python disponibilizar algumas estruturas de dados imutáveis, como as
tuplas, a maioria é mutável. Na programação funcional, devemos tratar
todos os dados como imutáveis!
1 # script funcao3.py
2 # captando os valores do campo Input
3 valores = input()
4 # separando os valores pelo espaço em branco e
5 # transformando-os em uma lista de inteiros
6 valores = [int(i) for i in valores.split()]
null
null
play_arrow
Exercício 4
info_outlineTUTORIAL
d content_copyCOPIAR
Python3
1 # script funcao4.py
2
3 # captando os valores do campo Input
4
5 valores = input()
6
null
null
play_arrow
Com isso, ao chamar a mesma função duas vezes (linhas 13 e 14), com,
teoricamente, o mesmo parâmetro, obtemos um efeito indesejável,
resultando em saídas diferentes, como pode ser observado no campo
Console do respectivo emulador.
Efeito colateral
É quando a função faz alguma operação que não seja computar a
saída a partir de uma entrada. Por exemplo: alterar uma variável
global, escrever no console, alterar um arquivo, inserir um registro no
banco de dados, ou enviar um foguete à Lua.
Atenção!
Ao garantir que uma função utilizará apenas os dados de entrada para
gerar um resultado e que nenhuma variável fora do escopo da função
será alterada, temos a certeza de que não teremos um problema
escondido, ou efeito colateral em nenhuma outra parte do código.
Exercício 5
info_outlineTUTORIAL
d content_copyCOPIAR
Python3
1 # script funcao5.py
2 def multiplicar_por(multiplicador):
3 def multi(multiplicando):
4 return multiplicando * multiplicador
5 return multi
6
null
null
play_arrow
PYTHON
content_copy
PYTHON
content_copy
Com isso, podemos utilizar a função multiplicar_por_5 para multiplicar
um número por 5 (linhas 13 e 14).
Funções lambda
Atenção!
return a*b
lambda a, b: a*b
note_alt_black
Atividade discursiva
Que tal tentar implementar essa alteração na função multiplicar_por? No
emulador a seguir, insira o seu código no lugar da palavra reservada
pass (linha 3):
Exercício 6
info_outlineTUTORIAL
d content_copyCOPIAR
Python3
null
null
play_arrow
Chave de respostaexpand_more
Python
content_copy
Maps
Exercício 7
info_outlineTUTORIAL
d content_copyCOPIAR
Python3
1 # script funcao_iterable.py
2 lista = [1, 2, 3, 4, 5]
3
4 def triplica_itens(iterable):
5 lista_aux = []
6 for item in iterable:
null
null
play_arrow
Exercício 8
info_outlineTUTORIAL
d content_copyCOPIAR
Python3
1 # script funcao_map.py
2 lista = [1, 2, 3, 4, 5]
3
4 def triplica(item):
5 return item * 3
6
null
null
play_arrow
Exercício 9
info_outlineTUTORIAL
d content_copyCOPIAR
Python3
1 # script funcao_map_lambda.py
2 lista = [1, 2, 3, 4, 5]
3
4 nova_lista = map(lambda item: item * 3, lista)
5
6 def main():
null
null
play_arrow
funcao_iterable.py expand_more
funcao_map_lambda.py expand_more
Filter
Atenção!
Todo elemento que for avaliado como true será incluído em um novo
iterável retornado pela função filter, que é pura e de alta ordem, pois
depende apenas dos parâmetros e recebe uma função como parâmetro.
A sua sintaxe é a seguinte:
filter(função, iterável)
Exercício 10
info_outlineTUTORIAL
d content_copyCOPIAR
Python3
1 # script funcao_filtro_iterable.py
2 lista = [1, 2, 3, 4, 5]
3
4 def impares(iterable):
5 lista_aux = []
6 for item in iterable:
null
null
play_arrow
Exercício 11
info_outlineTUTORIAL
d content_copyCOPIAR
Python3
1 # script funcao_filter.py
2 lista = [1, 2, 3, 4, 5]
3
4 def impar(item):
5 return item % 2 != 0
6
null
null
play_arrow
Exercício 12
info_outlineTUTORIAL
d content_copyCOPIAR
Python3
1 # script funcao_filter_lambda.py
2 lista = [1, 2, 3, 4, 5]
3
4 nova_lista = filter(lambda item: item % 2 != 0
5
6 def main():
null
null
play_arrow
função_filtro_iterable.py expand_more
função_filter.py expand_more
função_filter_lambda.py expand_more
video_library
Exercícios de programação funcional
em Python
Questão 1
B I e III
C II
D I, III e IV
E II e IV
Questão 2
Scriptlambda1.Py
content_copy
A 4
B 8
C 16
D 32
E 64
Parabéns! A alternativa C está correta.
Visão geral
Introdução
Concorrente
O dicionário on-line, DICIO, define a palavra “concorrente” como:
“Simultâneo; o que acontece ao mesmo tempo que outra coisa [...]”.
Conceitos de concorrência e
paralelismo
Em computação, o termo concorrente se refere a uma técnica para
tornar os programas mais usáveis. Ela pode ser alcançada mesmo em
processadores de apenas um núcleo, pois permite compartilhar o
processador de forma a rodar vários processos. Os sistemas
operacionais multitarefas suportam concorrência.
Exemplo
Threads e processos
Relembrando
Curiosidade
CPython
É a implementação principal da linguagem de programação Python,
escrita em linguagem C.
Atenção!
Atenção!
Como criar threads e processos em Python:
Exercício 13
info_outlineTUTORIAL
d content_copyCOPIAR
Python3
1 # script principal.py
2 from threading import Thread
3 from multiprocessing import Process
4
5 def funcao_a(nome):
6 print(nome)
null
null
play_arrow
Atenção!
Script Threads_var.Py
content_copy
Script Processos_var.Py
content_copy
Travas (Lock)
Script Threads_inc.Py
content_copy
Saída Do Script Threads_inc.Py
content_copy
Threads em execução.
Script Threads_inc_lock.Py
content_copy
Script Processos.Py
content_copy
Para evitar esse problema, vamos utilizar uma trava (lock) para realizar a
operação de incremento, assim como fizemos no exemplo anterior.
Curiosidade
O Python já disponibiliza essa trava nos objetos do tipo value, não sendo
necessário criar uma variável específica para a trava (lock). Observe
como foi realizada a trava utilizando o método get_lock() (linha 7).
Observe pelo console que agora nossa variável está com o valor certo:
um milhão!
video_library
Utilizando Python na programação
concorrente
Neste vídeo, abordaremos programação paralela usando o conceito de
Thread em Python
video_library
Exercícios de Python na programação
concorrente
Questão 1
A II e III
B I e IV
C I, II e IV
D I, II
E I, II e III
Script Processos.Py
content_copy
Script processos.py.
A 100
B 1000
C 2000
D 10000
E 20000
Visão geral
Introdução
Curiosidade
Conceito
Pela descrição de seus desenvolvedores, micro não quer dizer que toda
a aplicação precisa ficar em apenas um arquivo ou que falta alguma
funcionalidade, mas que o núcleo de funcionalidades dele é limpo e
simples, porém extensível.
Flask
É um micro framework Web em Python.
Script Flask1.Py
content_copy
Saída Do Script Flask1.Py-5
content_copy
Curiosidade
Rotas e parâmetros
Aprimorando rotas
Script Flask2.Py
content_copy
http://127.0.0.1:5000/ola expand_more
http://127.0.0.1:5000 expand_more
Vamos acertar nossa aplicação para criar, também, uma rota para a URL
raiz da aplicação (@app.route(‘/’)).
Vamos chamar a função dessa rota de index e criar essa rota conforme
linhas 5 a 7. Veja o resultado no script flask3.py a seguir:
Script Flask3.Py
content_copy
Veja, na imagem a seguir, que agora podemos acessar tanto a rota para
função índice (URL: /) (imagem A), onde é retornado “Página principal”,
quanto a rota da função ola_mundo (URL: /ola) (imagem B), que é
retornado “Olá, mundo.”:
Recebendo parâmetros
Script Flask4.Py
content_copy
Observe a URL da rota na linha 9, em que utilizamos a variável nome
entre < e>, que é o mesmo nome do parâmetro da função ola_mundo.
Isso indica que qualquer valor que for adicionado à URL após ‘/ola/’ será
passado como argumento para a variável nome da função ola_mundo.
Script Flask5.Py
content_copy
Observe que agora temos duas rotas para a mesma função (linhas 9 e
10). Em qualquer uma das URL, o usuário será direcionado para a
função ola_mundo.
Atenção!
A rota com URL ‘/ola/’ aceita requisições tanto para ‘/ola’ quanto ‘/ola/’.
Métodos HTTP
Script Flask6.Py
content_copy
Para verificar o método que foi utilizado na requisição, usamos o
atributo method do objeto request, que retorna uma das strings: GET,
POST, PUT ou DELETE.
Atenção!
Caso seja requisitada uma rota que exista, porém o método não seja
aceito pela rota, o erro retornado é o 405 – Method Not Allowed (método
não permitido), e não o 404 – Not Found (não encontrado), como ocorre
quando a rota não existe.
Utilizando modelos
Árvore de diretório.
Para o modelo ser acessado na URL raiz (‘/’), a função index() deve ser a
responsável por retorná-lo. Para isso, vamos utilizar a função
render_template disponibilizada pelo Flask, que recebe o nome do
arquivo que desejamos retornar.
Script Flask7.Py
content_copy
Modelo Indice.Html
content_copy
Expressões: {{ ... }}
Serve para escrever algo no modelo, como o valor de uma variável.
Declarações: {% ... %}
Serve para ser utilizado em laços e condicionantes, por exemplo.
Script Flask8.Py
content_copy
Modelo Ola.Html
content_copy
Além de informar a página que queremos renderizar na função
render_templates, podemos passar uma ou mais variáveis para essa
função. Essas variáveis ficarão disponíveis para serem utilizadas em
expressões ({{ }}) e declarações ({% %}) dentro do modelo (template).
video_library
Desenvolvendo aplicações Web com
Python
Neste vídeo, abordaremos framework Flask para desenvolvimento de
aplicações Web.
Questão 1
Exercicio1.Py
content_copy
A Olá, mundo.
Olá, mundo.
B
Olá, EAD.
C Olá, EAD.
Olá, EAD.
E
Olá, mundo.
Questão 2
Considere o código a seguir, no qual temos um servidor Flask
escutando na porta 5000, e responda:
Exercicio2.Py
content_copy
A Olá, GET.
Olá, GET.
B
Olá, POST.
C Olá, POST.
Olá, POST.
E
Olá, GET.
Visão geral
Introdução
(FAYYAD, 1996, p. )
settings
Pré-processamento
settings
Mineração de dados
settings
Pós-processamento
A imagem a seguir mostra todo o processo de KDD:
Codificação expand_more
Esta etapa, normalmente, é a que atrai maior atenção, por ser ela que
revela os padrões ocultos nos dados.
Não supervisionados:
Supervisionados:
Conceitos
Algoritmos supervisionados
A série está em uma planilha (arquivo CSV) com duas colunas, ano e
casos (número de casos). Na planilha, temos o número de casos de
2001 a 2017. Utilizaremos essa série histórica e aplicaremos o
algoritmo de regressão linear para estimar os casos de dengue para o
ano de 2018.
Script Regressão.Py
content_copy
Dados_dengue.Csv
content_copy
Saída Do Script Regressão.Py
content_copy
Atenção!
Após a execução do método fit, o objeto regr está pronto para ser
utilizado para predizer os casos para os anos futuros, utilizando o
método predict (linha 17).
Supervisionado ‒ classificação
Script Classificacao.Py
content_copy
Os dados de treino são, como o próprio nome diz, utilizados para treinar
(ajustar) o algoritmo, enquanto os dados de testes são utilizados para
verificar a acurácia dele, comparando o valor calculado para os testes
com os valores reais.
Dica
Para separar as amostras em treino e teste, o Scikit-Learn disponibiliza
uma função chamada train_test_split, que recebe como primeiro
parâmetro uma lista com as características e segundo parâmetro uma
lista com os rótulos.
De treino;
De teste das características;
De treino;
De teste dos rótulos.
Observe a linha 19, onde utilizamos essa função para gerar quatro novas
variáveis: características para treino (carac_treino); características para
teste (carac_teste); rótulos para treino (rot_treino); e rótulos para teste
(rot_teste).
Script Agrupamento.Py
content_copy
A partir da linha 18, temos a etapa de pós-processamento, em que
utilizamos a biblioteca Matplotlib para exibir dois gráficos, onde objetos
do mesmo grupo apresentam a mesma cor.
video_library
Aplicando Python para o tratamento
de dados
Neste vídeo, abordaremos o treinamento supervisionado.
video_library
Exercícios de aplicação do Python
para o tratamento de dados
Falta pouco para atingir seus objetivos.
Questão 1
I. Coleta e Integração.
II. Codificação.
III. Construção de atributos.
IV. Visualização dos dados.
A I e II
B I, II e III
C I, III e IV
D II, III e IV
E I, II e IV
Questão 2
A Coleta e integração
B Codificação
C Construção de atributos
Considerações finais
Como visto neste tema, a linguagem funcional pode resolver alguns
problemas relacionados à execução do programa, chamados de efeitos
colaterais.
headset
Podcast
Ouça este podcast sobre os principais assuntos abordados no tema.
Explore +
Acesse a documentação oficial do Python sobre as funções e os
operadores que se integram bem ao paradigma de programação
funcional, para aprender mais sobre o assunto.
Referências
CONCORRENTE. Dicionário On-line de Português –2009-2020.
Consultado na Internet em: 25 mar. 2022.
Download material
Relatar problema