Pyhton

Recentemente eu comecei a estudar para o "PCAP - Certified Associate in Python Programming". Essa é uma certificação que avalia a capacidade do profissional em construir rotinas de programação usando a linguagem Python. Durante esse estudo eu atualizei o meu "mapa mental" de referência sobre o Python.

Começar. É Gratuito
ou inscrever-se com seu endereço de e-mail
Pyhton por Mind Map: Pyhton

1. Estrutura de dados

1.1. Conjunto de dados armazenados em variáveis

1.2. Literais (literals)

1.2.1. Estruturas primitivas

1.2.1.1. Valores dos dados são determinados literalmente pelos próprio dados

1.2.2. Cada literal é armazenada de uma forma diferente pelo Python

1.2.3. Tipos

1.2.3.1. Strings

1.2.3.1.1. String é imutável

1.2.3.1.2. Pode ser vazia

1.2.3.1.3. Definida por aspas simples ou duplas ou três aspas

1.2.3.1.4. Caracteres podem ser acessado através de índices

1.2.3.1.5. Operações

1.2.3.1.6. Como texto é codificado

1.2.3.1.7. Atenção

1.2.3.2. Números (numeric)

1.2.3.2.1. É convertido em representação de máquina (bits)

1.2.3.2.2. Tipos

1.2.3.2.3. Operações

1.2.3.3. Boolean

1.2.3.3.1. Representa veracidade

1.2.3.3.2. Verdade ou Falso

1.2.4. Podem ser convertidos entre si através de funções nativas

1.3. Sequências

1.3.1. Capaz de armazenar mais de valor

1.3.2. Podem ser varridas por loops

1.3.3. Listas

1.3.3.1. lists

1.3.3.2. São mutáveis

1.3.3.3. Utiliza colchetes para definição

1.3.3.4. Os elementos não tem tipo fixo como em outras linguagens

1.3.3.5. Podem ser geradas a partir de strings

1.3.3.5.1. split()

1.3.3.6. Podem ser multidimensionais

1.3.3.6.1. Lista de Lista de Lista etc

1.3.3.7. Atribuir uma variável lista a outra variável não é um procedimento de cópia

1.3.3.7.1. Para realizar copia é necessário realizar um fatiamento da lista

1.3.3.8. Operações

1.3.3.8.1. São acessadas por indices

1.3.3.8.2. Podem ser fatiadas

1.3.3.8.3. Pode ser processado pelo loop for

1.3.3.8.4. Operadoes

1.3.3.8.5. Funções built in

1.3.3.8.6. List Comprehesion

1.3.3.8.7. Ordenação

1.3.3.9. Métodos nativos

1.3.3.9.1. append(elemento)

1.3.3.9.2. insert(posicao, elemento)

1.3.3.9.3. sort()

1.3.3.9.4. index()

1.3.4. Tuplas

1.3.4.1. tuples

1.3.4.2. São imutáveis

1.3.4.2.1. Não pode alterar o valor do elemento, mas pode adicionar ou excluir novos elementos

1.3.4.3. Utiliza PREFERENCIALMENTE parenteses para definição

1.3.4.3.1. ex

1.3.4.4. Menos utilizada

1.3.4.5. É possível criar uma tupla vazia ou uma de um elemento

1.3.4.5.1. ex

1.3.4.6. Similar a listas

1.3.4.6.1. Menos métodos disponível

1.3.4.6.2. Também utiliza indexação para acesso aos dados

1.3.4.7. Operadores

1.3.4.7.1. Concatenação

1.3.4.7.2. Replicação

1.3.4.7.3. in

1.3.4.8. É possível transformar tupla em lista (vice-versa)

1.3.4.8.1. list(tupla)

1.3.4.8.2. tuple(list)

1.4. Dicionários

1.4.1. dictionaries

1.4.2. São mutáveis

1.4.3. Utiliza chaves ([]) para definição

1.4.4. Não é um tipo de sequência, mas pode ser manipula como sequência através de métodos

1.4.5. Sua definição é similar a JSON

1.4.6. Conjunto de pares de chave-valor

1.4.6.1. Indexa estrutura de dados com chaves

1.4.6.1.1. Uma chave pode ser qualquer tipo de literal

1.4.6.1.2. Chave deve ser unica

1.4.6.1.3. Chave é case-sensitive

1.4.6.2. É possivel encontrar o valor usando a chave, mas não o inverso

1.4.7. A ordem de armazenamento não pode ser controlada pelo programador

1.4.8. Operações

1.4.8.1. len()

1.4.8.2. in

1.4.8.2.1. Verifica se uma chave existe no dicionário

1.4.8.3. del

1.4.8.3.1. Remove um par chave-valor

1.4.8.3.2. ex

1.4.9. Métodos nativos

1.4.9.1. Usados para manipular dicionário como lista

1.4.9.2. keys()

1.4.9.2.1. Retorna uma lista de todas as chaves reunidas no dicionário.

1.4.9.2.2. Semelhante a iteração convencional

1.4.9.3. values()

1.4.9.3.1. Retorna uma lista de valores armazenadas no dicionário

1.4.9.4. items()

1.4.9.4.1. Retorna uma lista de tuplas. Cada tupla armazena a chave e o valor

1.4.9.5. ex

1.5. Arquivos

1.5.1. Existem funções nativas

1.5.2. Python usa streams como interface de manipulação de arquivos

1.5.2.1. stream objects

1.5.2.2. Entidades abstratas usadas para se comunicar com os arquivos

1.5.2.3. As operações executadas com o stream refletem as atividades relacionadas ao arquivo físico

1.5.2.4. Dois tipos de streams

1.5.2.4.1. text

1.5.2.4.2. binary

1.5.2.5. Em geral, streams vem de uma das classes

1.5.2.5.1. classes

1.5.2.6. Não é possível usar construtores para criar streams.

1.5.2.6.1. A única maneira de obtê-los é chamar a função open()

1.5.3. Fluxo de manipulação

1.5.3.1. Abertura do arquivo

1.5.3.1.1. O stream é conectado com um arquivo físico

1.5.3.1.2. Através da função open()

1.5.3.1.3. Arquivo pode ser aberto em modos

1.5.3.2. Operação

1.5.3.2.1. Leitura

1.5.3.2.2. Escrita

1.5.3.3. Fechamento do arquivo

1.5.3.3.1. Chamado pelo método close() do stream

1.5.3.3.2. Se o stream for fechado antes da conclusão da gravação do dados no arquivo físico pode ser lançada exceção

1.5.4. Falhas de manipulação

1.5.4.1. Quando é lançada uma exceção de manipulação de arquivo, a exceção possui o a propriedade errno

1.5.4.2. errno possuí valores que descrevem a exceção

1.5.4.2.1. constantes

1.5.4.3. ex

1.5.4.4. Pode ser usada a função strerror() do módulo OS para simplificar a manipulação de erros

1.5.4.4.1. Espera o código de erro

1.5.4.4.2. Retorna string descrevendo o significado do erro.

1.5.5. Caminho dos arquivo

1.5.5.1. Python converte barras em barras invertidas sempre que descobrir que é exigido pelo sistema operacional.

1.5.5.1.1. Funcionam em Unix e Windows name = "/dir/file" name = "c:/dir/file"

1.5.6. Manipulação de arquivos texto

1.5.6.1. Na abertura do arquivo pode ser necessário adicionar a codificação do texto como parâmetro da função open()

1.5.6.1.1. open()

1.5.6.2. Leitura

1.5.6.2.1. Função open()

1.5.6.2.2. Método read()

1.5.6.2.3. Método readline()

1.5.6.2.4. Método readlines()

1.5.6.3. Escrita

1.5.6.3.1. Método write()

1.5.6.3.2. Recebe apenas a sequência que será transferida para um arquivo aberto

1.5.6.3.3. Nenhum caractere de nova linha é adicionado

1.5.6.3.4. ex

1.5.6.3.5. Método pode ser usado para escrever no stream stderr

1.5.7. Manipulação de arquivos binários

1.5.7.1. Escrita

1.5.7.1.1. ex

1.5.7.2. Leitura

1.5.7.2.1. Método read()

1.5.7.2.2. Método readinto()

1.5.8. Existem módulos para formatos específicos de arquivos

1.5.8.1. json

1.5.8.1.1. Manipula arquivos em json

1.5.8.1.2. json.dumps(dict)

1.5.8.1.3. json.loads(texto)

1.5.8.2. csv

1.5.8.2.1. Manipula artigos csv

1.5.8.2.2. import csv with open('numeros.csv','w') as arquivo: writer = csv.writer(arquivo) writer.writerow(('primeira','segunda','terceira')) writer.writerow((55,93,76)) writer.writerow((62,14,86))

1.6. Heap

1.6.1. Usado para representar filas de prioridade

1.6.1.1. Implementado por meio do pacote heapq

1.6.2. Organiza-se como uma arvore binária

1.6.2.1. Cada elemento pode ter um filho esquerdo e direito, e o menor elemento encontra-se no topo.

1.6.3. Oferece-lhe complexidade diferentes para a maior parte das operações

1.6.3.1. Algumas mais rápidas que as de uma lista.

1.7. Valor None

1.7.1. Não representa nenhum valor

1.7.2. 1

1.7.2.1. Levanta exceção

1.7.3. Duas circunstâncias em que none pode ser usado

1.7.3.1. Quando você a atribui a uma variável (ou a devolve como resultado de uma função)

1.7.3.2. Quando você a compara com uma variável para diagnosticar seu estado interno.

1.8. Arquivos binário

1.8.1. bytearray

1.8.1.1. Uma série de bytes

1.8.2. Sem formas

1.8.3. Não tem forma ou forma específica

1.8.4. Não podem ser armazenados usando qualquer um dos meios apresentados anteriormente

1.8.4.1. Eles não são cadeias nem listas.

1.8.5. É necessário criá-la explicitamente, usando um dos construtores disponíveis

1.8.5.1. ex

1.8.5.2. O construtor preenche toda a matriz com 100 zeros.

1.8.6. Assemelham-se a listas em muitos aspectos

1.8.6.1. São mutáveis

1.8.6.2. São contáveis com len()

1.8.6.3. É possível acessar qualquer um de seus elementos usando a indexação convencional

1.8.7. Não é possível definir nenhum elemento do bytearray com um valor que não seja um número inteiro entre 0 e 255 (incluído)

2. Classes e objetos

2.1. Programação Orientada a Objetos

2.1.1. POO

2.2. Características das POO

2.2.1. Proteger os valores selecionados contra acesso não autorizado

2.2.1.1. Encapsulamento

2.2.2. Produz quantos objetos forem necessários

2.2.3. Objetos podem se enriquecidos com novas funções advindos da herança

2.2.3.1. herança

2.3. Classes

2.3.1. Uma classe pode definir um objeto

2.3.2. Possuem métodos

2.3.2.1. É uma função incorporada dentro de uma classe

2.3.2.2. É necessário ter "self" como primeiro parâmetro na definição

2.3.2.2.1. self parameter

2.3.2.2.2. Permite que o método acesse entidades (propriedades e métodos) do objeto que invoca o método

2.3.2.2.3. Toda vez que o Python invoca um método, ele envia implicitamente o objeto atual como o primeiro argumento

2.3.2.2.4. Todos os argumentos precisam vim depois do self

2.3.2.2.5. O nome self não é obrigatório, mas é uma convenção recomendada

2.3.2.3. Construtores

2.3.2.3.1. __init__ method

2.3.2.3.2. def __init__(self):

2.3.2.3.3. Metodo de inicialização

2.3.2.3.4. Na definição do construtor e necessário definir o self como 1º parâmetro

2.3.2.3.5. Toda classe tem um construtor, mas eles podem não ser declarados explicitamente

2.3.2.3.6. Não retornam valores

2.3.2.3.7. Não pode ser invocado diretamente de um objeto ou dentro da própria classe

2.3.2.4. ex

2.3.2.5. Métodos podem ser "parcialmente" privados

2.3.2.5.1. name mangling

2.3.2.5.2. um método cujo nome começa com __ está (parcialmente) oculto.

2.3.2.5.3. ex

2.3.3. Possuem propriedades

2.3.3.1. Propriedades de classes

2.3.3.1.1. class variables

2.3.3.1.2. São estáticas

2.3.3.1.3. Seu valor é único para todas as instâncias da classe

2.3.3.1.4. ex

2.3.3.1.5. Não aparecem na propriedade __dict__

2.3.3.2. Propriedade de objetos

2.3.3.2.1. instance variables

2.3.3.2.2. São definidos dentro dos construtores das classes

2.3.3.2.3. Cada objeto mantém um valor independente

2.3.3.2.4. É possível adicionar propriedade a um objeto sem criá-la em uma classe antes

2.3.3.3. Propriedades privadas

2.3.3.3.1. name mangling

2.3.3.3.2. Só podem ser acessadas por pelos métodos da própria classe

2.3.4. Podem ser instanciadas

2.3.4.1. Processo de criação de objetos

2.3.4.2. livro = Livro()

2.4. Objetos

2.4.1. Funções nativas de manipulação

2.5. Encapsulamento

2.5.1. Quando qualquer componente de classe tem um nome que começa com dois sublinhados, ele se torna privado

2.5.1.1. Você não pode vê-lo fora da classe

2.5.2. Para manipulá-lo é necessário disponibilizar métodos na classe

2.6. Herança

2.6.1. inheritance

2.6.2. A herança é uma prática comum de passar atributos e métodos da superclasse para uma classe recém-criada, chamada subclasse.

2.6.3. Papeis na hierarquia de herança

2.6.3.1. ex

2.6.3.2. Super classe

2.6.3.2.1. superclasses

2.6.3.2.2. Classe pai

2.6.3.3. Sub Classe

2.6.3.3.1. subclasses

2.6.3.3.2. Classe filho

2.6.3.3.3. É definida apontando a superclasse na sua definição

2.6.3.3.4. Herda todos as propriedade e métodos definidos na superclasse

2.6.3.3.5. É possível chamar o construtor da superclasse

2.6.3.3.6. Não é obrigatório chamar o construtor da superclasse

2.6.4. Super Classe podem ser acessadas diretamente sem referência do nome

2.6.4.1. super()

2.6.4.1.1. Cria um contexto no qual você não passa o argumento "self" para o método que está sendo chamado

2.6.4.1.2. ex

2.6.4.1.3. Pode ser usado para chamar o construtor da superclasse e também para obter acesso a qualquer um dos recursos disponíveis dentro da superclasse.

2.6.4.1.4. Não é necessário passar o argumento self para os métodos do pai

2.6.5. É possível identificar a relação entre duas classes

2.6.5.1. issublass(class1, class2)

2.6.5.2. Retornará True se class1 for uma subclasse de class2 e False caso contrário.

2.6.6. É possível identificar se um objeto é instancia de uma classe que é sub classe de outra

2.6.6.1. isinstance(objeto, classe)

2.6.6.1.1. retorna True se o objeto for uma instância da classe

2.6.6.1.2. Ser uma instância de uma classe significa que o objeto é uma instância de todas as superclasses

2.6.6.1.3. ex

2.6.7. Python aceita herança múltipla

2.6.7.1. multiple inheritance

2.6.7.2. Ocorre quando uma classe tem mais de uma superclasse.

2.6.7.3. Se dois pais tiverem as mesma propriedades, a propriedade do pai descrito por último é sobrescrita

2.6.7.4. ex

2.7. Introspeção e Reflexão

2.7.1. Python permite que o programador realize essas duas atividades

2.7.2. Instrospecção

2.7.2.1. a capacidade de um programa examinar o tipo ou as propriedades de um objeto em tempo de execução;

2.7.3. Reflexão

2.7.3.1. a capacidade de um programa manipular os valores, propriedades e / ou funções de um objeto em tempo de execução

2.8. Métodos e propriedades especiais

2.8.1. Comuns a todos objetos do Pyhton

2.8.2. Permitem customizar comportamentos dos objetos

2.8.3. __str__()

2.8.3.1. Chamado quando se imprimi um objeto

2.8.4. __dict__

2.8.4.1. Contém os nomes e valores de todas as propriedades (variáveis) que o objeto está carregando no momento.

2.8.4.2. ex

2.8.5. __name__

2.8.5.1. Nome da classe

2.8.5.2. Existe somente dentro da classe

2.8.5.3. Se você quiser encontrar a classe de um objeto particular, você pode usar a função type()

2.8.5.4. ex

2.8.6. __module__

2.8.6.1. Contém o nome do módulo no qual a classe está definida

2.8.7. __bases__

2.8.7.1. Retorna uma tupla com as classes pais de uma classe

2.8.7.2. Somente classes têm essa propriedade

3. Python para Data Science

3.1. Por que Python para Data Sciente

3.1.1. Muitas biblioteca de análise de dados

3.1.2. Jupyter Notebook

3.2. Ferramentas

3.2.1. Anaconda

3.2.1.1. Gerenciador de pacotes para Python

3.2.1.2. Já possui uma distribuição do Python

3.2.1.3. Repositorio com versões de Python e Anaconda

3.2.1.4. Permite criar ambientes virtuais usando o Conda para manter um ambiente isolado de pacotes utilizados em um projeto

3.2.2. IDE's

3.2.2.1. Jupyter Notebook

3.2.2.1.1. Permite executar o Pyhton iterativamente

3.2.2.1.2. Antigamente conhecido como iPython

3.2.2.1.3. 40 linguagens de prrogramação

3.2.2.1.4. Operação

3.2.2.1.5. pode executar comandos do proprio OS

3.2.2.1.6. Debugger

3.3. Principais

3.4. Pandas

3.4.1. Conceitos

3.4.1.1. Bom para realizar Slices e Dices

3.4.1.2. Usado no pre-processamento

3.4.1.3. Data Munging

3.4.1.3.1. Transforma dados crus em dados estruturados para serem analisados por ferramentas de DS

3.4.1.3.2. Ferramentas de manipulação de dados

3.4.2. Principais Estruturas

3.4.2.1. Series

3.4.2.1.1. Array unidimensional que contem um array de dados e outro de labels

3.4.2.1.2. Exemplos de criação

3.4.2.2. Data Frames

3.4.2.2.1. Conceitos

3.4.2.2.2. Exemplos de criação

3.4.2.2.3. Manipula CSV

3.4.2.2.4. Manipula Excel

3.4.2.2.5. Pode ser criada a partir de um dict

3.4.2.2.6. E possivel alterar colunas usando o numpy

3.4.2.2.7. É possivel aplicar uma função ao valores de todas as celulas

3.4.2.2.8. Realiza operações de conjunto

3.4.2.2.9. Análise descritivas do dados

3.4.2.3. Time Series

3.4.2.3.1. rng = pd.date_range('1/1/2016', periods = 50, freq = 'S')

3.5. NumPy

3.5.1. Definições

3.5.1.1. Pacote de computação ciêntifica que suporta operações com arrays e matrizes

3.5.1.2. Arrays possuem tipo estaticos, são eficientes computacionalmente e mais rapidas que listas

3.5.1.3. Não tem metodos analiticos

3.5.1.4. Forma uma dobradinha esperta com o pandas

3.5.2. Estrutura de dados

3.5.2.1. Cria um array

3.5.2.1.1. np.array([0, 1, 2, 3, 4, 5, 6, 7, 8])

3.5.2.2. Criar matriz

3.5.2.2.1. matriz = np.array([[1,2,3],[4,5,6]]

3.5.2.2.2. lista = [[13,81,22], [0, 34, 59], [21, 48, 94]] matriz2 = np.matrix(lista)

3.5.2.3. vetor1.shape

3.5.2.3.1. dimensão do array

3.5.2.4. vetor2.dtype

3.5.2.4.1. tipo dos elementos do array

3.5.2.5. np.arange(1, 10, 0.25)

3.5.2.5.1. criar array com progressao arimetica

3.5.2.6. np.diag(np.array([1, 2, 3, 4]))

3.5.2.6.1. cria matriza com diagonal 1,2,3,4

3.5.2.7. np.random.rand(10)

3.5.2.7.1. criar array de numero aleatorios

3.5.2.8. b = np.arange(10) array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) # [start:end:step] b[2:9:3] array([2, 5, 8])

3.5.3. Metodos estastiticos para analise de arrays/matrizes

3.5.3.1. np.mean(A)

3.5.3.2. np.std(A)

3.5.3.3. np.sum(d)

3.5.3.4. np.prod(d)

3.5.4. Operações de conjuntos

3.5.4.1. np.array_equal(a, b)

3.5.4.2. # Comparação a = np.array([1, 2, 3, 4]) b = np.array([4, 2, 2, 4]) a == b

3.5.4.3. np.array([1, 2, 3]) + 1.5

3.5.5. tipos

3.5.5.1. numpy.ndarray

3.5.5.1.1. n-dimensional array

3.6. Scikit Learn

3.6.1. Documentação

3.6.2. Metodos

3.6.2.1. Estimadores

3.6.2.1.1. LinearRegression

3.6.2.1.2. Metodos Fit e Predict

3.7. Scrapy

3.7.1. Extrai informações de web page e transforma em dados estruturados

3.8. Pacores para Visualização

3.8.1. MatplotLib

3.8.1.1. Conceitos

3.8.1.1.1. Visualização de graficos

3.8.1.1.2. Suporte para todos SO

3.8.1.1.3. Exportar Graficofs

3.8.1.2. pode ser utilizada com pylab

3.8.1.2.1. utilizar objeto do numpy

3.8.1.2.2. permite criar graficos paralelos, um dentro do outro

3.8.1.3. pode ser utilizado para criar mapas

3.8.2. Seaborn e uma alternativa ao Matplotlib

3.8.2.1. Dados estasticos

3.8.2.1.1. Mostra correlação linear

3.8.2.2. Algumas visualizações interessantes para análise estastica

3.8.2.3. possui visualizações mais requintadas

3.8.3. Bokeh

3.8.3.1. visualização interativas para webbrowser

3.8.3.2. pode integrar com o gmaps

4. Estruturas de controle

4.1. Condicionais

4.1.1. conditional statements

4.1.2. if

4.1.3. else

4.1.3.1. precisa ser precedido do if

4.1.4. elif

4.1.4.1. precisa ser precedido do if

4.1.4.2. Similar a um else if

4.1.5. Podem ser aninhados

4.1.5.1. if-else, if-elif, if-elif-else

4.1.6. Expressões condicionais

4.1.6.1. Podem ser usadas para criar generators

4.1.6.2. Forma resumida de definir um valor condicionalmente a uma expressão

4.1.6.3. ex

4.1.6.4. Também podem ser usada em list comprenhension

4.2. Lacos

4.2.1. for in

4.2.1.1. Permite interação em estrutura de dados

4.2.1.1.1. lista

4.2.1.1.2. dicionários

4.2.1.1.3. tuplas

4.2.2. while

4.3. Palavras chaves importantes

4.3.1. pass

4.3.1.1. Instrução vazia

4.3.1.2. Usada para preencher temporariamente estruturas de controles

4.3.1.3. Quando é executado, nada acontece, mas você evita obter um erro quando o código vazio não é permitido.

4.3.2. break

4.3.2.1. Para a execução da estrutura

4.3.3. continue

4.3.3.1. Pula a execução e vai para próxima iteração da estrutura

5. Desvantagens

5.1. Não é a linguagem de programação mais rápida do mundo

5.2. Depurar código não é uma tarefa tão simples como em outras linguagens

5.3. Não é recomendada para programação de baixo de nivel

5.3.1. “close to metal” programming

5.4. Ainda não é muito utilizada para aplicações móveis

6. Operadores

6.1. operators

6.2. Operadores Unários/Binario

6.2.1. Operadores Binários

6.2.1.1. binary operators

6.2.1.2. Recebe dois operandos

6.2.2. Operadores Unários

6.2.2.1. unary operators

6.2.2.2. Recebe apenas um operando

6.2.2.3. "=" + operador

6.2.2.3.1. var= +, var= -,

6.2.2.4. Transforma número em negativo

6.3. Operadores Aritméticos

6.3.1. numeric operators: ** * / % // + –

6.3.1.1. addition, subtraction, multiplication, integer division, exponentiation, remainder

6.3.2. Tabela

6.3.3. O resultado da divisão inteira é o menor inteiro (incluindo negativo)

6.3.3.1. ex

6.3.4. Qualquer divisão por zero levanta exceção

6.3.4.1. divisão

6.3.4.2. divisão inteira

6.3.4.3. resto da divisão

6.3.5. Ordem de execução

6.3.5.1. binding

6.3.5.2. Apenas a exponenciação não é executada a partir da esquerda

6.3.5.2.1. ex

6.3.6. Prioridades

6.3.6.1. exponeciação

6.3.6.2. multiplicação, divisão, divisão inteira e resto da divisão

6.3.6.3. soma e subtração

6.4. Operadores de atribuição e atalhos

6.4.1. assignments and shortcut operators

6.4.2. 1

6.4.3. variavel = variavel op variavel;

6.5. Operadores Bitwise

6.5.1. bitwise operators: ~ & ^ | << >>

6.5.2. Compara os dígitos correspondentes em dois números binários e retorne um resultado em forma binária

6.5.3. Os argumentos precisam ser inteiros

6.5.3.1. Não pode usar float

6.5.4. Abrangem todas as operações lógicas

6.5.4.1. Inclusive XOR

6.5.4.2. Para o operador complemento

6.5.4.2.1. Ele vira os bits até atingir o primeiro 0 da direita

6.5.4.2.2. ~ x é o mesmo que -x-1

6.5.4.2.3. é o mais prioritário

6.5.5. Diferença dos operadores lógicos

6.5.5.1. Opera a nível de bit

6.5.5.1.1. Compara bit por bit

6.5.6. ex

6.6. Operadores para comparação

6.6.1. relational operators == != > >= < <=

6.7. Operadores Lógicos

6.7.1. Relational operators ( == != > >= < <= )

6.8. Operadores Booleanos

6.8.1. Boolean operators: not and or

6.8.2. ex

6.8.3. Menos prioritários

6.9. Operadores para strings

6.9.1. string operators: * +

6.9.2. Concatenação

6.9.2.1. +

6.9.3. Repetição

6.9.3.1. *

6.9.3.1.1. ex

6.10. Prioridade de execução

6.10.1. priorities

6.10.2. Parêntesis podem ser usados para alterar prioridade de execução

6.10.2.1. Conjuntos mais internos são calculados com prioridade

6.10.3. Tabela

6.10.3.1. Tabela

7. Conceitos básicos

7.1. Python é uma linguagem de Programação

7.1.1. Possuí alguns elementos básicos de linguagens

7.1.1.1. Alfabeto

7.1.1.1.1. Conjunto de símbolos existente em um determinado lingua

7.1.1.1.2. Símbolos léxico

7.1.1.1.3. Cada linguagem de programação tem seu dicionário e você precisa dominá-lo

7.1.1.2. Sintaxe

7.1.1.2.1. Regras usadas para determinar se uma sequência de símbolos forma uma sentença válida

7.1.1.2.2. Cada linguagem tem suas regras e elas devem ser obedecidas

7.1.1.3. Semântica

7.1.1.3.1. Regras que determina se uma determinada sentença faz sentido

7.1.1.3.2. A rotinas precisam fazer sentido

7.1.2. Criada por Guido Van Rossum

7.2. Objetivos

7.2.1. Ser fácil, intuitiva e poderosa

7.2.1.1. É tão fácil de entender como inglês

7.2.2. Ser codigo aberto

7.2.2.1. Open Source

7.2.2.2. Todo mundo pode contribuir com novas funcionalidades

7.2.3. Ser adequada para tarefas simples e complexas

7.3. Características gerais de python

7.3.1. Linguagem

7.3.1.1. Alto nível

7.3.1.1.1. Permite humanos expressar comandos para computadores sem precisar utilizar linguagem de máquina

7.3.1.1.2. Produtos

7.3.1.2. Interpretada

7.3.1.2.1. Linguagem Interpretada VS linguagem compilada

7.3.1.2.2. Existem duas formas de transformar linguagem de alto nível em linguagem de máquina

7.3.1.2.3. Scripts python são traduzidos para para ByteCode e executada pelo Python VIrtual Machine

7.3.1.3. Portável

7.3.1.4. Orientada a objetos

7.3.2. Usa indentação para definir blocos de código

7.3.2.1. Pode ser obtido de duas maneiras

7.3.2.1.1. inserindo um número específico de espaços

7.3.2.1.2. Usando o caractere de tabulação

7.3.2.2. Use Tab ou espaço não misture os dois

7.3.3. Possui comunidade ativa

7.4. Concorrentes

7.4.1. Perl

7.4.2. Ruby

7.5. Versões

7.5.1. Python 2

7.5.1.1. Recebe apenas atualizações para correção de bugs

7.5.1.2. Para programas rodarem em python 3 é necessário reescrever boa parte do código

7.5.2. Python 3

7.5.2.1. versão atual

7.5.2.2. É completamente diferente do Python 2

7.6. Implementações

7.6.1. Python é uma especificação de linguagem que pode ser implementada de formas diferentes

7.6.2. Cpython

7.6.2.1. Mantidos pelo Python Software Foundation

7.6.2.2. Python convencional

7.6.2.3. Implementação de referência

7.6.2.4. Escrito em linguagem C

7.6.2.5. Também chamado de Python canônico

7.6.3. Jython

7.6.3.1. Escrito em linguagem Java

7.6.3.2. Implementa apenas o Python 2

7.6.4. Cython

7.6.4.1. Escrito em linguagem C

7.6.4.2. Mais eficiente do que o Cpython

7.6.4.3. Melhora o desempenho para realização de cálculos matemáticos

7.6.5. PyPy

7.6.5.1. O Python usado dentro do Python.

7.6.5.2. Usado para desenvolver o próprio Python

7.7. Elementos

7.7.1. Variaveis

7.7.1.1. Contêiners que armazenam os resultados das operações e expressões

7.7.1.2. Regras para definição

7.7.1.2.1. O nome da variável pode ter

7.7.1.2.2. O nome da variável deve começar com uma letra ou underscore

7.7.1.2.3. O nome da variável não pode ser palavra reservada do Python

7.7.1.2.4. O nome da variável pode ter qualquer tamanho

7.7.1.3. Permite definição dinâmica dos tipos

7.7.1.3.1. Tipagem dinâmica

7.7.1.4. Permite declaração múltipla

7.7.1.4.1. pessoa1, pessoa2, pessoa3 = "Maria", "José", "Tobias"

7.7.2. Estrutura de dados

7.7.3. Operadores

7.7.4. Estrutura de controle

7.7.5. Funções

7.7.6. Pacotes e módulos

7.7.7. Exceções

7.7.8. Classes e objetos

7.8. The Python Language Reference

7.8.1. Descreve a sintaxe e a “semântica central” da linguagem.

7.8.2. Manual de referência oficial da linguagem

8. Console

8.1. Funções de entradas de dados

8.1.1. input()

8.1.1.1. Recebe entrada de usuário

8.1.1.1.1. input('Entre com o 1º valor: ')

8.1.1.2. Por padrão o retorno é uma string

8.1.1.2.1. Pode ser convertida

8.1.1.2.2. int(), float(), etc.

8.2. Funções de saída de dados

8.2.1. print()

8.2.1.1. Imprimi no console todos os argumentos

8.2.1.2. Pode operar com os tipos de dados do Python

8.2.1.3. Argumentos

8.2.1.3.1. Se não receber argumento imprime uma nova linha vazia

8.2.1.3.2. Pode receber argumentos "keywords"

8.2.1.3.3. ex

8.2.1.4. Impressão pode ser formatada

8.2.1.4.1. formatting

8.2.1.4.2. name = "Mike" print "Hello %s" % (name)

8.2.1.5. Caracteres especiais podem ser escapados com "\"

8.2.1.5.1. Não pode ser passado apena uma escape como parametro

9. Funções

9.1. Quando usar funções

9.1.1. Uma mesma rotina precisa ser executada diversas vezes com valores diferentes

9.1.2. Pedaço de código é muito grande e isso dificulta a leitura e entendimento da rotina

9.1.2.1. Decomposição

9.1.3. É necessário dividir o trabalho entre diversos programadores

9.2. São definidas e podem ser invocadas

9.2.1. Uma função só pode ser invocada depois que for definida

9.2.2. Um função não pode ter o mesmo nome de uma váriavel

9.2.3. Definição

9.2.3.1. def funcao(parametros):

9.2.4. Invocação

9.2.4.1. funcao(argumentos)

9.2.5. Quando uma função é invocada

9.2.5.1. Python verifica se o nome especificado é legal

9.2.5.2. Verifica se os argumentos necessários foram passados

9.2.5.3. Pula a execução para rotina da função

9.2.5.4. Executa a função e pode retornar algum valor

9.3. Recebem argumentos (parâmetros)

9.3.1. Parâmetros existem dentro da função

9.3.1.1. Podem ter seus valores padrão (predefinidos) na assinatura da função

9.3.1.1.1. default parameter values

9.3.1.1.2. Quando não forem enviados argumento na chamada da função esses valores são considerados como argumentos

9.3.2. Argumentos são os valores passado nos parâmetros das funções

9.3.2.1. parameters vs. arguments

9.3.2.2. Existem fora da função e são portadoras de valores passados ​​para os parâmetros correspondentes.

9.3.2.3. Variáveis com dados literais (string, float, int) passadas como argumentos são copias

9.3.2.3.1. Isso não vale para lista, dicionários, tuplas

9.3.3. Duas abordagens para passagem de argumentos

9.3.3.1. Abordagem posicional

9.3.3.1.1. positional way

9.3.3.1.2. Atribui o argumento (primeiro, segundo e assim por diante) ao parâmetro (primeiro, segundo e assim por diante)

9.3.3.2. Abordagem argumento com palavra-chave

9.3.3.2.1. keyword arguments

9.3.3.2.2. o significado do argumento é ditado pela palavra chave

9.3.3.3. Você pode misturar a passagem de parâmetros posicionais e a passagem de argumentos de palavras-chave

9.3.3.3.1. mixed argument passing

9.3.3.3.2. Qualquer argumento com palavra-chave deve ser colocado após o último argumento posicional

9.3.4. Alterar o valor do parâmetro não propaga o valor para fora da função

9.4. Palavra reservada return

9.4.1. return

9.4.2. Duas ações

9.4.2.1. Sem nada a seguir

9.4.2.1.1. Causa o término imediato da execução da função

9.4.2.2. Estendido com uma expressão

9.4.2.2.1. Causa o término imediato da execução da função

9.4.2.2.2. Avaliará o valor da expressão e retornará

9.4.3. Não é obrigatória

9.4.4. Pode ser ingnorada na chamada da função

9.4.4.1. Não é necessário atribuir um variável com o valor de retorno da chamada

9.4.5. Se uma função não retornar um valor usando return, presume-se que ela retorne implicitamente None.

9.5. Escopo de (nomes) variáveis

9.5.1. name scopes

9.5.2. Parte de um código em que o nome é reconhecível corretamente.

9.5.3. Uma variável existente fora de uma função tem um escopo dentro dos corpos das funções

9.5.3.1. Se dentro da função existir uma variável com mesmo nome de uma variável externa, nesse caso essa variável se torna oculta

9.5.4. Palavra reservada global

9.5.4.1. global

9.5.4.2. Permiti extender o escopo de variáveis internas para fora da função

9.5.4.3. A variável precisar ser declarada como global antes de receber alguma atribuição

9.5.4.4. ex

9.6. Funções nativas

9.6.1. Funções built-in

9.6.1.1. Prontas para uso

9.6.2. Verificação de tipos de dados

9.6.2.1. type()

9.6.2.1.1. Retorna o tipo de uma váriavel

9.6.3. Conversão de literais

9.6.3.1. Para int

9.6.3.1.1. int()

9.6.3.2. Para float

9.6.3.2.1. float()

9.6.3.3. Para string

9.6.3.3.1. str()

9.6.3.3.2. Converte qualquer coisa para string

9.6.4. Manipulação de series

9.6.4.1. range()

9.6.4.1.1. Gera uma lista de números

9.6.4.1.2. list(range(0,10, 2))

9.6.4.2. map()

9.6.4.2.1. Executa uma função para todos os elementos de uma lista

9.6.4.2.2. Recebe uma função ou uma expressão lambda

9.6.4.2.3. Recebe as lista com parâmetros que serão utilizados na função

9.6.4.2.4. Retorna um iterator

9.6.4.3. reduce()

9.6.4.3.1. Executa uma função em cima de lista ate restar somente um elemento

9.6.4.3.2. Recebe uma função ou uma expressão lambda

9.6.4.3.3. reduce faz parte da lib functools

9.6.4.3.4. print(reduce(lambda x, y: x+1, [1,2,3,4,5,6,7,8]))

9.6.4.4. filter()

9.6.4.4.1. Filtra uma coleção de valores com base em uma função ou lambda que retorne um booleam

9.6.4.4.2. list(filter(lambda x: x%2 == 0, lista))

9.6.4.5. zip()

9.6.4.5.1. Recebe duas listas e retorna tuplas com o elementos da mesma posição em cada lista

9.6.4.5.2. pode receber dicionarios

9.6.4.6. enumerate()

9.6.4.6.1. Recebe uma lista e retorna uma lista de tupla que com indice e cada elemento

9.6.4.6.2. não funciona para dictionaries

9.6.4.7. len()

9.6.4.8. sorted()

9.6.4.8.1. Recebe um lista e retorna outra lista com elementos ordenados

9.6.4.9. reversed()

9.6.4.9.1. Retorna um iterador que acessa a sequência especificada na ordem inversa

9.6.5. Manipulação de pacotes e módulos

9.6.5.1. dir()

9.6.5.1.1. Mostra todos os métodos e atributos de um namespace

9.6.6. Outras funções

9.6.6.1. help( metodo )

9.6.6.1.1. A função help() explica como utilizar cada método de um objeto

9.6.7. Manipulação de classes objetos

9.6.7.1. hasattr()

9.6.7.1.1. Capaz de verificar com segurança se algum objeto / classe contém uma propriedade especificada

9.6.7.1.2. Também pode operar em classes

9.6.7.2. setattr()

9.6.7.3. getattr()

9.6.7.4. delattr()

9.6.7.5. issublass(class1, class2)

9.6.7.5.1. Retornará True se class1 for uma subclasse de class2 e False caso contrário.

9.6.7.6. isinstance(objeto, classe)

9.7. Funções lambda

9.7.1. lambda functions

9.7.2. Funções anonimas

9.7.2.1. anonymous function

9.7.2.2. função sem nome

9.7.3. Funções inline

9.7.4. Utilizada para simplificar o código, para torná-lo mais claro e fácil de entender.

9.7.5. Não usar a palavra def

9.7.6. ex

9.7.7. Especialmente utilizadas com map(), filter(), reduce()

9.7.7.1. map()

9.7.7.1.1. Recebe a função lambda e um objeto iteravel como uma lista

9.7.7.1.2. Usa a função lambda para transformar os valores de uma lista em um generator

9.7.7.1.3. ex

9.7.7.2. filter()

9.7.7.2.1. Recebe a função lambda e um objeto iteravel como uma lista

9.7.7.2.2. A função lambda filtra descreve uma expressão que filtra os elementos

9.7.7.2.3. ex

9.8. Closures

9.8.1. Técnica que permite o armazenamento de valores, apesar do contexto em que foram criados não existir mais

9.8.2. Função dentro de outra função

9.8.3. ex

9.8.3.1. A função fora() retorna a função dentro()

9.8.3.2. o contexto da função fora fica congelado ate o chamada da função de dentro que foi retornada por ela

10. Pacotes e módulos

10.1. Módulos

10.1.1. Identificado por um nome

10.1.2. É um conjunto de entidades

10.1.2.1. Funções, Variáveis, Constantes, Classes e Objetos

10.1.3. Como utilizar

10.1.3.1. Precisa ser importado pelo menos uma vez

10.1.3.1.1. Importar o modulo

10.1.3.1.2. Importar entidades do modulo

10.1.3.1.3. ex

10.1.3.1.4. O nome do modulo pode ser qualificado com o caminho do mesmo em um pacote

10.1.3.2. Quando um módulo é importado pela primeira vez, seu código é executado automaticamente como um script

10.1.3.2.1. Isso só acontece na primeira importação do módulo

10.1.3.2.2. Deve ser usado para inicializar alguns aspectos internos do módulo

10.1.4. Módulos nativos

10.1.4.1. Muitos módulo são nativos do Python

10.1.4.2. math

10.1.4.2.1. Matemática

10.1.4.3. random

10.1.4.3.1. Geração de series aleatórias

10.1.4.4. re

10.1.4.4.1. Expressões regulares

10.1.4.5. plataform

10.1.4.5.1. Permite que você saiba onde está e quais componentes funcionam para você

10.1.5. Quando Python inicializa um módulo pela 1° vez, é gerada a pasta __pycache__

10.1.5.1. Contém um arquivo com uma versão semi-compilada do módulo importado

10.1.5.1.1. module.cpython-xy.pyc

10.1.5.1.2. Não é código de máquina ainda

10.1.5.2. Ajuda a acelerar a execução do programa

10.1.6. Como criar

10.1.6.1. Todo módulo tem uma entidade __name__

10.1.6.1.1. Pode ser usado para detectar o contexto em que código do módulo foi ativado

10.1.6.1.2. Se o valor for "__main__"

10.1.6.1.3. Se o valor for o nome do arquivo do módulo

10.1.6.2. Não é possível ocultar entidades do seus módulos

10.1.6.2.1. Se você desejar ocultar alguma entidade você pode usar a convenção de prefixar o nome dela com _ ou __

10.1.6.2.2. Isso significa que essa entidade não deverá ter seu conteúdo alterado

10.2. Pacotes

10.2.1. Usado para agrupar fisicamente módulos

10.2.1.1. .

10.2.1.2. Código fonte dos módulos são colocados em um pacote

10.2.2. Quando um módulo esta dentro de um pacote seu nome precisa ser qualificado na importação

10.2.2.1. import pacote.modulo

10.2.3. Arquivo __init__.py

10.2.3.1. __init__.py é usado para inicializar o pacote

10.2.3.2. Até a versão 2.7 era obrigatório a presença desse arquivo para o Python considerar o diretório como pacote

10.2.3.3. O código é executado quando qualquer módulo do pacote é importado

10.2.3.4. O arquivo pode ser vazio

10.2.3.5. Pode ser colocada em sub-pastas do pacotes para inicializar módulos desses subpacotes

10.3. Python busca os módulos nos pacotes adicionados no "path"

10.3.1. path é variável de ambiente

10.3.1.1. Acessível no modulo sys

10.3.2. É possível adicionar diretórios com pacotes nessa variável

10.4. A função dir() pode ser usada para mostra todos os métodos e atributos de um namespace

10.4.1. Namespace

10.4.1.1. Espaço de nomes em um contexto, pacote, modulo

10.4.2. ex

11. Exceções

11.1. try-except-else-finally block

11.2. Tipo de dado especial que representa uma falha

11.2.1. Quando acontece alguma ação não permitida na execução do programa, Python Levanta uma exceção

11.2.1.1. raising an exception

11.2.2. Exceções levam a interrupção do sistema, quando não são tratadas

11.3. Todas as possíveis exceções têm seus nomes inequívocos

11.3.1. Você não pode criar exceções com nomes de outras exceções já existente no Python

11.4. Exceções são classe que podem ser organizadas em arvores de herança

11.4.1. Exceções são classes

11.4.2. O bloco except pode ser capaz de avaliar exceções de mesmo tipo ou de qualquer tipo mais especifico

11.5. Exceções nativas

11.5.1. Python 3 tem 64 exceções já definidas

11.5.1.1. Principais exceções

11.5.1.2. BaseException

11.5.1.2.1. Mais geral de todas as exceções do Python

11.5.1.3. Exception

11.5.1.3.1. Exceção que inclui todas as exceções causadas por erros resultantes de mau funcionamento do código

11.5.1.4. KeyboardInterrupt

11.5.1.4.1. Exceção levantada quando o usuário usa um atalho de teclado projetado para finalizar a execução de um programa (Ctrl-C na maioria dos sistemas operacionais)

11.5.2. Todas as exceções internas do Python formam uma hierarquia de classes.

11.5.3. Todos os objetos de todas as subclases de BaseExcepetion possuem a propriedade args

11.5.3.1. Uma tupla que reuni todos os argumentos passados ​​para o construtor de classe.

11.5.3.2. ex

11.5.4. É possível extender as classes de Exceção do Python para criar novas exceções

11.6. Lançamento de exceções

11.6.1. palavra-chave raise

11.6.2. Você pode lançar exceções para diversos fins

11.6.2.1. Para testar como sua rotina trata eventuais exceções

11.6.2.2. Para dividir o tratamento de uma exceção maior em pedaços menores

11.6.3. Exceção lançada dentro de um bloco except não precisam ser nomeada

11.6.3.1. Levanta imediatamente a mesma exceção que atualmente é tratada.

11.6.3.2. Você pode usar isso para distribuir o tratamento de exceções entre diferentes partes do código.

11.6.3.3. ex

11.6.4. raise statement

11.7. Tratamento de exceções

11.7.1. Se a exceção é tratada, a interrupção do programa pode ser suspensa

11.7.2. Python fornece ferramentas eficazes que permitem observar exceções, identificá-las e manipulá-las com eficiência.

11.7.3. Fluxo básico

11.7.3.1. Tentar alguma coisa

11.7.3.1.1. Palavra reservada - try:

11.7.3.1.2. Deve existir apenas 1 bloco try

11.7.3.2. Avaliar se a tentativa gerou uma exceção

11.7.3.2.1. exceptions hierarchy

11.7.3.2.2. Palavra reserva - except

11.7.3.2.3. Deve existir pelo menos um bloco expcet

11.7.3.2.4. except pode ser nomeada com exceção que se pretende avaliar

11.7.3.2.5. O primeiro except capaz de avaliar a exceção levantada vai levar a execução para seu bloco de tratamento

11.7.3.3. Tratar a exceção

11.7.3.3.1. Pode levantar uma nova exceção

11.7.3.3.2. Pode suprimir e continuar a execução

11.7.3.4. ex

11.7.4. É possível ter o mesmo bloco de tratamento para duas exceções diferentes

11.7.4.1. ex

11.7.5. É possível usar keyword else para definir um bloco executado quando uma exceção não é capturada

11.7.5.1. Precisa ser colocada depois do último except

11.7.5.2. ex

11.7.6. É possível usar keyword finally para definir um bloco que é sempre executado (exceção capturada ou não)

11.7.7. Exceções lançadas dentro de uma função podem ser tratadas dentro da função ou fora dela

11.8. Palavra chave assert

11.8.1. assertions

11.8.2. Avaliar uma expressão

11.8.3. É lançada uma exceção "AssertionError" se a avaliação for

11.8.3.1. False

11.8.3.2. None

11.8.3.3. Número igual a 0 (Zero)

11.8.3.4. String vazia

11.8.4. ex

12. Geradores e iteradores

12.1. generators

12.2. Rotina especializada capaz de produzir uma série de valores que podem ser percorrido em loops

12.3. generator com yeld

12.3.1. yield

12.3.2. Usados em funções que geram valores

12.3.3. Uma variação da keyword return

12.3.4. Armazena valores em lista que e retornada quando uma função tem sua execução concluída

12.3.5. Essa função retorna um generator então não pode ser invocada explicitamente

12.3.6. ex

12.3.7. O operador in pode ser usado para avaliar se algum valor especifico foi gerado

12.4. iterador clássico

12.4.1. Objeto que cujo valores podem ser varridos por um loop assim como uma lista

12.4.2. Precisam ter dois métodos

12.4.2.1. __iter__()

12.4.2.1.1. Retorna o próprio objeto

12.4.2.2. __next__()

12.4.2.2.1. Retorna o próximo valor

12.4.2.2.2. Se não existir nenhum valor para ser retornado o método deve lançar uma exceção de StopInteration

12.4.3. ex

12.5. list() pode transformar a invocação do generator em uma lista real

12.6. generator com expressões condicionais

12.6.1. similar a list compreenhesion

12.6.2. ex