Python Aula1
Python Aula1
Thiago Martins
Python
Programa (aulas 1 a 5):
2
Python
Programa (aulas 6 a 13):
6. Aspectos funcionais da linguagem. Funções como objetos. Clausuras.
Geradores. Funções de alta ordem. Exercícios.
7. Módulos e Pacotes. Exercícios.
8. Biblioteca Python: IO de arquivos, urllib.
9. Biblioteca Pyhton: JSON, CSV, Expressões Regulares. Exercícios.
10. Computação científica em Python: Numpy. Exercícios.
11. Computação científica em python Matplotlib. Exercícios.
12. Computação científica em python: Pandas.
13. Aspectos variados: mypy(?) sql(?) I/O assíncrono(?), web(?)
3
Python
Referências
Página da disciplina (em construção…)
How to Think Like a Computer Scientist: Interactive Edition por A. B.
Downey.
https://runestone.academy/runestone/books/published/thinkcspy/index.html
Documentação da versão 3 de python
https://docs.python.org/3/
Google colab
https://colab.research.google.com/
4
Python
5
Python
6
Python
Histórico
- Criada por Guido van Rossum no Centrum Wiskunde&Informatica da
Holanda
- Primeira versão pública em 1991
- Versão 1 em 1994
- Desenvolvimento migra para Corporation for National Research Initiatives, EUA
7
Python
Histórico
- 2000: Licença GPL
- Versão 2 em 2000
- Versão 3 em 2008
Transição 2 para 3 ainda dolorosa!
8
Python
Uso
9
Python
Uso
pypl em 2024, Python vs. Java
10
Python
Uso
Escala da IEEE Spectrum em 2019
11
Python
Uso
Github (2022)
12
Python
Uso
Kdnuggets:
Data science
13
Python
Ferramentas:
interpretador CPython
14
Python
Ferramentas:
IDE’s
Spyder
Netbeans
Eclipse
VSCode...
15
Python
Ferramentas:
Jupyter notebook
16
Python
Ferramentas:
Google CoLab
Amazon SageMaker
Microsoft Azure Nobebook
...
17
Conceitos fundamentais
Instruções:
Diretrizes executadas pelo interpretador Python
e. g.: print(2+2)
Expressões:
Trechos de linguagem que possuem um valor
e. g.: 2+2
Variáveis:
Referências para objetos na memória.
e. g.: a = 2
18
Tipos de dados
Simples: Funcionais:
Numéricos: int, float, complex Funções
Boleanos: bool Geradores
Agregados Sequenciais:
string, lista, tupla
Agregados não-
Sequenciais:
Dicionários
Conjuntos
Objetos
19
Boleanos
ou x or y
e x and y
não not x
Obedecem curto-circuito! (mais adiante...)
20
Dados numéricos
21
Dados numéricos
22
Dados numéricos
soma x + y
Operadores
Aritméticos subtração x - y
multiplicação x * y
Divisões inteiras
arredondadas divisão (real) x / y
para baixo
divisão (inteira) x // y
resto da divisão x % y
Exponenciação x ** y
23
Dados numéricos
Operadores
AND x & y
bit a bit
OR x | y
NOT ~x
XOR x ^ y
24
Dados numéricos
Operadores
Comparação Estritamente x < y
menor que
Menor ou igual a x <= y
Igualdade x == y
25
Strings
26
Strings
Concatenação
‘exemplo ’ + ‘de ’ + ‘cadeia’ => ‘exemplo de cadeia’
Constantes adjacentes são concatenadas
‘exemplo ’ ‘de ’ ‘cadeia’
Acesso indexado (índice baseado em zero)
‘abc’[0] 🡺 ‘a’ ’abc’[2] 🡺 ‘c’
‘abc’[-1] 🡺 ‘c’ ’abc’[-2] 🡺 ‘b’
Slices (fatias)
‘abcdef’[1:2] 🡺 ‘bc’ ‘abcdef’[:3] 🡺 ‘abc’ ‘abcdef’[3:] 🡺
‘def’
Comprimento
len(‘abc’) 🡺 3
27
Strings
Pertencimento
‘bc’ in ‘abcde’ 🡺 True
‘ef’ in ‘abcde’ 🡺 False
Atenção! Complexidade quadrática
Comparação
‘abc’ == ‘abc’ 🡺 True
‘abc’ < ‘abd’ 🡺 True
‘abc’ < ‘baa’ 🡺 True
‘ab’ < ‘abc’ 🡺 True
‘’ < ‘abc’ 🡺 True
28
Listas
29
Listas
Comprimento
len([1, 2, 3]) 🡺 3
Pertencimento:
1 in [1, 2, 3] 🡺 True 4 in [1, 2, 3] 🡺 False
Concatenação
[1, 2, 3]+[4, 5, 6] 🡺 [1, 2, 3, 4, 5, 6]
30
Tuplas
31
Tuplas
Comprimento
len((1, 2, 3)) 🡺 3
Pertencimento:
1 in (1, 2, 3) 🡺 True4 in (1, 2, 3) 🡺 False
Concatenação
(1, 2, 3)+(4, 5, 6) 🡺 (1, 2, 3, 4, 5, 6)
32
Variáveis e objetos
a = a + 1 ????
Típico de linguagens imperativas
33
Variáveis e objetos
a = a + 1 ????
Típico de linguagens imperativas
34
Variáveis e objetos
Atribuição composta
a += 1 o mesmo que* a = a + 1
a -= 1 o mesmo que* a = a – 1
a *= 2 o mesmo que* a = a + 2
/= %= //= **=...
Atribuição simultanea
a, b = 1, 2 -a aponta para 1, b para 2
a, b = b, a -Troca as referências
35
Variáveis e objetos
36
Variáveis e objetos
Objetos e identidade
a = 1000
b = a
Operador is: testa se duas referências apontam para o mesmo objeto
a is b 🡺 True
Isso é diferente da comparação
Resultados de
a = 10000
a == b
b = a – 1
a is b
b += 1
37
Objetos e mutabilidade
38
Objetos e mutabilidade
39
Objetos e mutabilidade
40
Listas como pilhas
41
Objetos e mutabilidade
42
Objetos e mutabilidade
ATENÇÃO!!!!!
Variáveis são sempre referências para objetos!
Em se tratando de objetos mutáveis, isso pode levar a
comportamentos não-intuitivos! (aliasing)
a = [1, 2, 3]
b = a
b.append(4)
a 🡺 [1,2,3,4] !!!!!!!
Pois a e b apontam para o mesmo objeto...
43
Objetos e mutabilidade
44
Objetos e mutabilidade
45
Sets (Conjuntos)
46
Sets (Conjuntos)
Tamanho
len({1, 2, 3}) 🡺 3
Pertencimento
1 in {1, 2, 3}) 🡺 True 4 in {1, 2, 3}) 🡺 False
Insere novos elementos
a={1, 2, 3}
a.add(4)
a 🡺 {1, 2, 3, 4}
47
Sets (Conjuntos)
48
Sets (Conjuntos)
Copia conjuntos
a = a.copy()
a.discard(3)
a 🡺 {1, 2}
a.discard(4)
A 🡺 {1, 2}
49
Dados numéricos
contém x in y
Operadores
igualdade x == y
subconjunto x <= y
Intersecção x & y
União x | y
diferença x - y
diferença simétrica x ** y
50
Sets (Conjuntos)
Copia conjuntos
b = a.copy()
b is a 🡺 False
Incorpora um conjunto
a = {1, 2, 3}
a.update({0,3,4}
A 🡺 {0,1,2,3}
Remove elementos pertencentes a um conjunto
a = {1, 2, 3}
a.difference_update({0,3,4}
A 🡺 {1,2}
51
Dicionários
52
Dicionários
53
Dicionários
54
Programação em Python
55
Programação em Python
Execução:
Inserir o conteúdo em um arquivo .py:
56
Programação em Python
Execução:
Invocar o interpretador:
57
Programação em Python
Execução:
Em ambientes -ux o próprio script pode ser executado diretamente!
58
Programação em Python
Execução:
Em ambientes -ux o próprio script pode ser executado diretamente!
59
Programação em Python
Execução:
Em ambientes -ux o próprio script pode ser executado diretamente!
thiago@betelgeuse:~$ ./programa.py
Primeiro número: 563
Segundo número: 221
O máximo divisor comum é:1
thiago@betelgeuse:~$
60
Programação em Python
Execução:
É possível inserir programas em células do jupyter:
61
Programação em Python
Elementos do programa
# Este programa calcula o máximo divisor comum pelo alg. de euclides
a = int(input("Primeiro número: "))
b = int(input("Segundo número: "))
# Para este algoritmo é necessário que a>b
if a < b:
a, b = b, a
if b<=0:
print("Os números devem ser positivos")
else:
while b!=0:
a, b = b, a % b
print("O máximo divisor comum é:" + str(a))
62
Programação em Python
Elementos do programa
# Este programa calcula o máximo divisor comum pelo alg. de euclides
a = int(input("Primeiro número: "))
b = int(input("Segundo número: ")) Comentários
# Para este algoritmo é necessário que a>b
(ignorados pelo
if a < b:
a, b = b, a interpretador)
if b<=0:
print("Os números devem ser positivos")
else:
while b!=0:
a, b = b, a % b
print("O máximo divisor comum é:" + str(a))
63
Programação em Python
Elementos do programa
# Este programa calcula o máximo divisor comum pelo alg. de euclides
a = int(input("Primeiro número: "))
b = int(input("Segundo número: ")) Chamadas a funções
# Para este algoritmo é necessário que a>b
(subprogramas)
if a < b:
a, b = b, a
if b<=0:
print("Os números devem ser positivos")
else:
while b!=0:
a, b = b, a % b
print("O máximo divisor comum é:" + str(a))
64
Programação em Python
Elementos do programa
# Este programa calcula o máximo divisor comum pelo alg. de euclides
a = int(input("Primeiro número: "))
b = int(input("Segundo número: "))
# Para este algoritmo é necessário que a>b
if a < b:
Construtores de objetos
a, b = b, a
if b<=0:
print("Os números devem ser positivos")
else:
while b!=0:
a, b = b, a % b
print("O máximo divisor comum é:" + str(a))
65
Programação em Python
Elementos do programa
# Este programa calcula o máximo divisor comum pelo alg. de euclides
a = int(input("Primeiro número: "))
b = int(input("Segundo número: "))
# Para este algoritmo é necessário que a>b
if a < b:
Controle de fluxo
a, b = b, a
if b<=0:
print("Os números devem ser positivos")
else:
while b!=0:
a, b = b, a % b
print("O máximo divisor comum é:" + str(a))
66
Programação em Python
Elementos do programa
# Este programa calcula o máximo divisor comum pelo alg. de euclides
a = int(input("Primeiro número: "))
b = int(input("Segundo número: "))
# Para este algoritmo é necessário que a>b
if a < b:
Blocos delimitados por
a, b = b, a
if b<=0: indentação
print("Os números devem ser positivos")
else:
while b!=0:
a, b = b, a % b
print("O máximo divisor comum é:" + str(a))
67
Programação em Python
Elementos do programa
# Este programa calcula o máximo divisor comum pelo alg. de euclides
a = int(input("Primeiro número: "))
b = int(input("Segundo número: "))
# Para este algoritmo é necessário que a>b
if a < b:
Blocos delimitados por
a, b = b, a
if b<=0: indentação
print("Os números devem ser positivos")
else:
while b!=0:
a, b = b, a % b
print("O máximo divisor comum é:" + str(a))
68
Comentários
69
Controle de fluxo
70
Controle de fluxo
while
while <condição>
<bloco>
71
Controle de fluxo
for
for <variável> in <coleção enumerável>
<bloco>
72
Controle de fluxo
for e range
A função range é particularmente apropriada para o
laço for:
a = 0
for i in range(3)
a += i
print(a)
73
Controle de fluxo
for e range
range(n) Enumera os inteiros de 0 a n-1
range(n,m) Enumera os inteiros de n a m-1
range(n,m,s)
Enumera os inteiros de n, n+2s, n+3s… até o maior
valor de n+ks < m
74
Controle de fluxo
for e range
range(n) Enumera os inteiros de 0 a n-1
range(n,m) Enumera os inteiros de n a m-1
range(n,m,s)
Enumera os inteiros de n, n+2s, n+3s… até o maior
valor de n+ks < m
75
Controle de fluxo
break, continue, pass
break força a saída imediata do bloco.
76
Chamadas a funções/métodos
77
Python
78
Python
#include <string.h>
#include <memory.h>
Linguagem de programação imperativa
#define ERR_OK 0
… mas
#define com 1suporte
ERR_ARG a construtos funcionais.
Orientada a objetos
int remove_elemento(int **vetor, unsigned *tamanho, unsigned posicao) {
if(posicao >= tamanho) return ERR_ARG;
… mas sem< “radicalismos”
if(posicao tamanho – 1)
memmove(*vetor+posicao, *vetor+posicao+1, tamanho–posicao–1);
Simples
*tamanho--;
*vetor = realloc(*vetor, *tamanho);
return ERR_OK;
}
… mas poderosa!
Eliminar uma posição de vetor em C
Linguagem
a = 1
de programação imperativa
for i in range(2,10):
a = a * i
… mas com suporte a construtos funcionais.
print(a)
80