Python
Python
história:
O Python foi concebido no final de 1989 por Guio van Rossum no Instituto de Pesquisa
Nacional para Matemática e Ciência da Computação (CWI), nos Países Baixos, como um
sucessor da ABC capaz de tratar exceções e prover interface com o sistema operacional
Amoeba através de scripts.
Sobre:
Python e uma linguagem de tipagem dinâmica( não e preciso declara o que vai entra na
variável)
Dados:
No python temos string dado em texto sempre entre ‘’ ou “”;
Você pode muda os tipos dos dados( essa ação e chamada de type convertion, type casting,
coercion)
Comentários:
De uma linha #;
Também temos as docstrings pra usa múltiplas linha (isso não e um comentário e uma
docstrig) elas podem ser “”” ou ‘’’
Operadores:
+ além de soma ele faz a concatenação;
-:
/ divisão;
** potencia;
== igual;
!= diferente;
And e or;
// divisão inteiras
Operadores lógicos:
If true;
If else;
If a not in;
Formatando valores:
Print(f’variavel:.2f)
:s texto;
:d int.
< esquerda
> direita
- centro
Print(f’{a;g>34})
Boas praticas:
Laços de repetição :
While e for
Quando vc sai do while sem ser forçado ou por uma quebra vc pode coloca um else em baixo
para ser executado
While True:
Print(‘hello word’)
Else:
Print(‘certo’)
If isinstance(variável, str) pra validar o tipo no tipo e possível coloca uma tupla e coloca um ou
mais valores
Indices = range(len(lista)
Também funciona
Listas:
Esse espaço vai ser voltado a escrever tudo sobre listas já que e um dado mais complexo e
mais usado um dado mutável
Feita com []
Srt ou lista.Split() vai quebra as str no espaço criando uma lista lembrando que tem que joga
isso em uma variável ou direto no print
Variável’’.join(variavel) Join vai junta as listas, str, duplas com elemento que vc coloca
Lista.extend(lista_x)
Alguns cuidados que se teve toma com dados mutáveis quando vc muda uma coisa vc acaba
mudando ele em todas as áreas
Listab = listaA.copy()
E possível coloca a *resto isso coloca todas os índices que não serão usados em uma variável
Tuplas:
Como as linguagens salvam esse números fazem aparecer um erro no seu código
se a soma de 0.1 + 0.7 for feita o numero que aparecera será 0.7999999999999 e não 0.8
Interpretado python:
"""
python -u (unbuffered)
Legibilidade conta.
Embora esse modo possa não ser óbvio à primeira vista a menos que você seja holandês.
"""
Ternária:
Funções :
Uma função pode ou não receber valores se e coloca valores e obrigado a coloca os
valores(também chamados de parâmetros)
Argumentos nomeados são aqueles que vc indica a ordem, a partir que um argumento e
nomeado todos a frente dele são obrigados ao mesmo
Escopo:
Quando e definido uma variável ela e definida em um espoco específico
Temos os escopos dentro de funções, que podendo ter funções dentro de outras funções a
mesma com seu próprio escopo
Se a variável não estiver definida naquela função ela ira pegar a externa mais próxima. Esse
movimento só acontece de interno pra externo nunca de externo pra interno
Call Stack é uma ferramenta que usa pequenas partes da memoria do pc para fazer o código
roda
Higher Order Functions - Funções que podem receber e/ou retornar outras
funções
First-Class Functions - Funções que são tratadas como outros tipos de dados
comuns (strings, inteiros, etc...)
Não faria muita diferença no seu código, mas penso que deveria lhe informar isso.
Observação: esses termos podem ser diferentes e ainda refletir o mesmo significado.
Dicionário:
Estrutura de dados com chave e valor
Também e possível construir com base na função dict()
Como Keys()
Que mostra as a chaves, com isso podemos pegar essas chaves e transforma em uma tuple ou
list qualquer coisa pra visualização fica melhor
Setdefault() também trata erros, mas se aquela chave que for chamada não existir e possível
escolher um valor padrão
Se a chave gênero não existir o valor padrão dela será ‘ não declarado’ também pode fazer isso
com get()
Copys em dicionários:
Nessa não esta feito uma copia. As duas listas estão conectadas tudo que for mudado em uma
e mudado na outra
Com essa e feita uma shallow copy nessa os dados imutáveis (str,int,...) que forem mudados na
original não serão afetados, dados mutáveis como lista são modificados nas duas
Dic.upadate()
introdução à List comprehension:
Mapeamento quando você pega um valor de uma lista e transforma ou não esse dado
Essa nova lista poder ter items a mais, mas os que já estava continua no mesmo lugar
Filtro e um if após o for que não tem else feito para filtrar o que vai pra sua nova lista
Podem ser feita com dicionário e dupla mas vc tem que usar dupla com{}
Falsy e truthy
lista = []
dicionario = {}
conjunto = set()
tupla = ()
string = ''
inteito = 0
flutuante = 0.0
nada = None
falso = False
intervalo = range(0)
Quando e declarado um objeto o mesmo tem nomes que pode ser observados
O comando hasttr() vai ver se o objeto tem o não aquela método sem quebra o código
com o getattr e possível usar os métodos diretos do objetos como uma variável que o método
foi colocado ou uma lista
Interavel e interator :
Os objetos interavel ele dá os elementos um por vez
O interator apenas sabe o próximo elemento. Interador não sabe o ultimo elemento não sabe
o primeiro apenas o próximo
Cada vez que dá um next e gastado esse elemento e quando ele gasta todos para no ultimo e
aparece um erro na tela
Generator:
Generator e uma função que sabe pausa. Todo genator e um interad, mas nem todo interator
e um generator
Então o generator não vai salvar toda a informação na memoria ele vai entrega a informação
em partes
Só que a lista vai ter toda a informação dela índices, começo e fim, len ...
Nesse casa ele ira pegar qualquer erro que não esteja especificado acima e joga pra ela
Esse __class__ e __name__ são usados para falar o erro e seu nome, esse as joga o erro e uma
variável que no caso e error
hierarquia de erros
módulos:
Modularização:
Quando e feito o import dos seu próprios arquivos o arquivo que você e seu arquivo main
geralmente quando se faz um programa você faz uma pasta main e seu programa funciona em
torno dela
Importando um package:
Quando e possível usar __all__ na pasta que não e o main que ira ser importado e possível
limitar o que vai sair desse modulo
Como você viu na aula anterior, usamos certas convenções para nomes de variáveis,
funções, classes e assim por diante. Essas convenções tem um nome que podemos usar
para nos referir ao modo como estamos nomeando determinados objetos em nosso
programa: PascalCase, camelCase e snake_case.
PascalCase - significa que todas as palavras iniciam com letra maiúscula e nada
é usado para separá-las, como
em: MinhaClasse , Classe , MeuObjeto , MeuProgramaMuitoLegal .
Essa á a convenção utilizada para classes em Python;
camelCase - a única diferença de camelCase para PascalCase é a
primeira letra. Em camelCase a primeira letra sempre será minúscula e o
restante das palavras deverá iniciar com letra maiúscula. Como
em: minhaFuncao , funcaoDeSoma , etc... Essa conversão não é usada em
Python (apesar de eu confundir as duas e às vezes acabar
chamando camelCase de PascalCase ou vice-versa, mas agora você sabe a
diferença);
snake_case - este é o padrão usado em Python para definir qualquer coisa que
não for uma classe. Todas as letras serão minúsculas e separadas por um
underline, como em: minha_variavel , funcao_legal , soma .
Qualquer importação feita tem que ser relacionada ao seu main quando se tem uma package
Esse ponto antes do modulo representa o package que você esta pode ser colocado o próprio
nome também
Variável livre e quando a variável não esta no escopo que a função chama
Letra aqui e uma variável livre para função soma. Um variável livre pode ser usada, mas
modificada, mas quando e colocado o comando nonlocal isso se torna possível
Decoradoras e decoradores:
Decoradoras são as funções que são usadas para passa o código agora os decoradores são
ferramentas que ajudam a usar os decoradores os syntax_sugar usado com o @
Tambem e possível cria uma fabrica de decoradores e parâmetros a ela como visto na
aula40.py’
Count:
Veja na aula44
Aula45
Usadas quando se tem quando se tem um problema grande, e possível dividir esse problema
em várias partes
O caso recursivo aqui e multiplicação de 2 até 44, mas esse código esta errado porque ele vai
geral uma quantidade de call Stack(o limite de call Stack e 1k no python) absurdas uma Stack
overflow pra isso vamos precisa de um caso base, que vai fazer o código para de retorna a
própria função.
Nessa função têm um loop então ela irá passar por todos os elementos. Fazendo ser possível
mudar esses elementos
Ambient virtual:
A muitas maneiras de se utilizar ambientes virtuais em python, mas aqui a que vamos usar e
venv.
Na pasta venv e colocado a sua versão de python e todas as bibliotecas de terceiros. Isso e
usado para não ter um acúmulo de versões e documentos de cada trabalho no seu pc e
também utilizado para ser usado novamente em outra época por exemplo dá manutenção em
um site antigo.
E possível dá qualquer nome ao ambiente, mas os mais comuns são: venv, env
Se e colocando um ponto antes do nome sua pasta do ambiente virtual fica oculta
Lembrando que quando o ambiente virtual for executado ele vai usar o python que foi
guardado que pode ser diferente do python global da sua máquina
Para ativar o ambiente virtual primeiro e preciso cria o ambiente com python -m venv nome
do ambiente
Agora com seu ambiente virtual instalado e ativo e possível baixar coisas de fora do python
para e somente o ambiente virtual sem afeta o python global.
Utilizando o pypi onde vai ter uma série de ferramentas para serem usada em python
Usando por exemplo pip install PyMySQL para instalar uma biblioteca sql
Ser quiser atualizar e so colocar um pip install –upgrade e se tiver algum problema de erro e
so tentar python -m pip install o que você quiser.
Para desinstalar e necessário apenas o comando pip uninstall pymysql se quiser pular a
confirmação e só coloca um -y na frente
Pip freeze vai dizer o qtem instalado na no seu ambiente virtual
geralmente a pessoas tem várias coisas instalada nos ambientes virtuais então e possível fazer
um pip freeze > requiments.txt para pode baixar tudo de uma forma mais fácil
Quando e criada uma pasta e possível especificar o caminho que a pasta vai ou não. Se não for
colocada a pasta ficara no arquivo que você está, mas e possível especificar o caminho
Essas duas barras são usadas apenas no Windows(ser não der certo e so coloca um r antes do
caminho).
Porem não e possível apenas abrir o arquivo como editar ele com os context manager
R leitura
Quando o ‘’w’’ e usado ele apaga tudo que já tem no arquivo. O ‘’a’’ escreve tudo abaixo do
conteúdo que já existe no arquivo
With vai ser usado como o open só que mais seguro porque ele abre e fecha o arquivo sozinho
Json:
Uma estrutura de envio de arquivos baseada em js. Json só e bem simples no seu uso não
consegue enviar métodos nem estruturas muitos complexas com um set
Aqui estávamos enviando o arquivo e possível usar om encoding= ‘utf8’ para usa acentos e
caracteres especiais
Aqui estou abrindo o json que não tem mais no meu python é uma coisa de fora. Lembrando
que o json pode modifica um pouco os dados nesse caminho uma tupla pode se torna uma
lista por exemplo
Positional-only parametrs:
Um forma de limitar o usuário tudo que estive antes de barra tem que ser posicional
Keyword-only-Arguments:
Mas para fazer o código ficar mais limitado e possível usar a / e * juntos
Com isso os antes da / so podem ser posicionais e das frente do * so podem ser nomeados
A partir daqui e uma novo tópico que vai render muitas aulas e conhecimentos
Class:
Class vão reunir um grupo de objetos(instâncias). As class vão ter atributos(dados) e métodos,
para usar as classe temos o padrão de usar Pascalcase.
Como também não posso buscar aquele nome no escopo class sem mencionar a mesmo como
fiz no print comentado. E essa variável valor só pode ser nos métodos da class
As instancias são guardadas em com um formato de em dicionários como dic com isso e
possível visualizar e editar essa instancias de uma forma diferente
Uma coisa bastante interessante e que e possível manter o estados dentro da class
Nesse caso depois que self.tipo passa por andar o self.tipo ganha um estado
Nesse caso True isso pode ser usado e modificado com o código
Class method
Invés de pegar a instancia e cria e modificar ela com os method e possível pegar a própria class
e fazer uma extensão dela
Static method
Que não e nada mais que uma função normal só que protegida pelo namespace da class
Property
E normal em linguagens de programação usar atributos em forma de métodos para proteger
os atributos os famosos getter
Setter
Setter e um método para tratar o atributo para usa um setter tem que ter um property so
olhar na aula67.py
Encapsulamento:
(modificadores de acesso: public, protected, private)
# ou suas subclasses.
# _NomeClasse__nome_attr_ou_method
# declarado.
Agregação: uma associação do tipo fraca um elemento conecta a outro, mas um elemento
existe sem outro um sendo necessário de outro para realiza certa tarefa.
Composição: e uma forma agregação de forma mais específica nesse termo tudo vai ser mais
ou menos iguala a agregação, só que aqui uma depende da outra pra existir
Teoria de herança
Na era um objeto não depende de outro, mas sim um objeto e outro
Como cliente nesse caso ele faz parte de uma classe mais genérica que e Pessoa
Class Pessoa
Class filha
Sobreposição
Quando e escrito um method em uma derived class com o mesmo nome de um method na
super class da mesma, fazendo esse method ser rescrito.
Herança múltipla
Quando uma class recebe varias classe fazendo um seu código ser genial usando e otimizando
ferramentas, como também pode deixar seu código desnecessariamente complexo e confuso
E tão confuso que o python usa um próprio sistema para organizar esssa ordem o famoso
c3 linearization um algoritmo que vai fazer o mro do código
Abstração
Quando o programador não quer que uma class seja usada diretamente,
Pra isso existe o mixin uma class que reuni funções para serem usadas naquela família de class
ou em outra herança não conectada a aquela.
Abstract Base Class (abc):
Em python class abstratas não podem ser instanciadas diretamente, essa class tem property ,
setter .. (usando o @ abstractmethod como decorador interno) métodos concretos e
abstratos. @ abstractmethod não tem corpo e podem ser implementados mais tardes em
subclass lembrando que a abc e um molde de método e coisa que as subs class devem seguir