-
Day 1 - Iniciando no mundo da programação
-
Introdução ao treinamento
- os caminhos da carreira Python
- Base
- Web
- Automação
- Engineer
-
Programação e Linguagens
- Binários
- Compilação e interpretação
-
A plataforma Python
- PLR
- PSF
- PyPI
- Comunidade
-
Instalação e ambiente
- Instalação, ambientes online, editores
- opções no CLI do Python
- Obtendo ajuda no interpretador
-
Git e seu primeiro Hello World
- Criando e organizando um Repositório GIT
- Escrevendo um Hello World
- Shebang e ambiente
- Scripts Executáveis
- Commits
-
Ambiente, script e variáveis
- Comentários de código
- Metadados e dunder variables
- Lendo variáveis de ambiente
- Escrevendo um Hello World multilingue
-
Tipos de Instrução
- Expressões
- Assignments
- Statements
-
Blocos de código e identação
- Qual o motivo de Python usar espaços em branco?
- Como organizamos os blocos de código
-
Ambientes Virtuais e Ipython
- Criando virtualenv
- Instalando libraries do PyPI
- Usando o Ipython
-
Day 2 - Tipos e estruturas de dados
-
O que são tipos de dados e o tipo inteiro
- Como Python organiza a informação na memória
- O que é um objeto
- O tipo de dado inteiro
- Syntax Sugar e operadores
-
Tipos primários float, bool, NoneType
- Floats e divisão
- Booleanos e expressões condicionais
- Inicializando variáveis "vazias"
-
Textos, Encoding e String
- Como são armazenados os textos
- A tabela de caracteres ASCII
- Caracteres de controle
- A tabela de caracteres UTF-8
- Emojis
- Encoding e Decoding
- Bytes
- Concatenação
- Iteração em textos
-
Formatação de textos
- Iterpolação Vs Concatenação
- Interpolação clássica com %
- str.format
- alinhamento, preenchimento, precisão
- f-strings
- Renderizando templates
-
Tipos compostos e o tipo tupla
- Combinando tipos com tuplas
- Representando pontos do plano cartesiano
- Tuplas para interpolação de textos
- Protocolo de subscrição para acesso a índices
- Fatiamento
- Desempacotamento
- Imutabilidade
-
Listas
- Mutabilidade
- Adicionando elementos
- Removendo elementos
- Inserindo em posição especifica
- Append no final da lista
- Fatiamento
- Extensão de listas
- Contando elementos
- Iteração de lsitas
- Protocolo de Container `in`
-
Sets e a teoria dos conjuntos
- A teoria dos conjuntos
- Sets
- Hash Table
- Removendo duplicidade
-
Dicionários
- Modelando dados com dicionário
- Subscrição com chaves
- HashTable e contains
- Iteração de dicionários
- Extensão de dicionários
- get
-
Usando estruturas de dados
- Ordem de complexidade
- Substituindo uma cadeia de ifs por um dict
-
Day 3 - Input, Output, Processamento
-
Stdin & Stdout e argumentos de CLI
- print e stdout
- input e stdin
- sys.argv
- piping
-
Manipulando arquivos e pastas
- Review de comandos Linux para filesystem
- O módulo os.path
- Listando pastas e arquivos
- Criando pastas e arquivos
- Lendo e Escrevendo em arquivos
- A biblioteca Pathlib
-
Tratamento de erros com Exceptions
- A abordagem LBYL
- A abordagem EAFP
- Objetos Exception
- Capturando multiplas Exceptions
-
Gravando logs
- A bilbioteca logging
- Log levels
- Configurando o Logger
- Formatando Logger
- Logs rotativos
-
Algoritmos
- Transformando texto em pseudocódigo
-
Condicionais Ternárias
- Ifs inline ou ternários
- Atribuições condicionais
- Atribuições short circuit
-
Repetições com for e while e comprehensions
- O loop for em detalhes
- O loop while
- List comprehension
- Dict comprehension
- Range e geradores
- Mutação durante a iteração
-
Day 4 - Funções, Debugging e seu primeiro projeto.
-
Funções úteis embutidas
- Somando coleções
- Obtendo valor mínimo e máximo
- Obtendo o tamanho de coleções
- Ordenando e Revertendo
- Filtrando e mapeando
- Enumerando iteradores
- Juntando sequencias em pares
-
Funções úteis da stdlib + envio de e-mails
- Obtendo dados randômicos
- Ferramentas de iteração
- Funções parciais
- Estatistica básica
- Obtendo IDs unicos
- lendo password do usuário
- Enviando e-mails
-
Criando suas próprias funções
- O que é uma função
- Transformando fórmula matemática em função
- Argumentos e atribuições
-
Anatomia detalhada de uma função
- Motivos para usar funções
- Assinatura de função
- Argumentos posicionais e nomeados
- Docstring
- Retornos
-
Escopos, argumentos mutáveis e coringas
- Os 4 namespaces do Python
- Acessando variáveis de outros escopos
- Variáveis globais
- globals() e locals()
- Argumentos coringa
- Argumentos mutáveis
-
Funções lambda
- HIgh Order Functions
- Closures
- Lambdas
- Protocolo Callable
-
Recursão e programação funcional
- Comparação entre imperativo e funcional
- Retry com loop
- Retry com recursão
-
Debugging
- prints e fstring
- execução interativa
- Debuggers interativos
- Tipos de debuggers
- Debugger em IDE
-
O sistema de imports
- importlib
- sys.path e python -m site
- conflitos de dependencias
- isolamento
- requirements
- Poetry
-
Organizando repositório, projeto e vscode
- Repositório
- Issues
- Milestones
- Configurando o VSCode
-
Estrutura de pastas, build e install do projeto
- gitignore e Pull Requests
- Criando módulos e fazendo imports
- Meta arquivos: init e main
- pycache
- criando um setup.py
- Instalando em modeo editável
-
Entry points de linha de comando
- Entrypoints
- Argparse
-
Gestão de dependencias e Makefile
- Lendo requirements.txt no setup.py
- Extra requirements
- Usando Makefile para organizar comandos
-
Day 5 - Qualidade de Software e de Código
-
Doctest, Pytest e Decorators
- Escrevendo doctests
- Pytest
- assertions
- O que são decorators
-
Unit tests, Integrations tests, Configuração do Pytest e Github Actions CI
- Diferença entre unit e integration
- Configuração do Pytest com conftest
- Pytest marks
- Criando um workflow no CI do Github ACtions
-
Boas práticas em testes, setup, teardown, parameterize e reports
- Tests sem side effects
- Usando Fixtures
- Setup e teardown
- Generators e Hooks
- Testes de CLI
- xUnit reports
-
Qualidade de código com linters e auto formatação
- Qualidade código
- Estilo e linters
- Usando pyproject.toml
- Auto formatação com isort e black
-
Como escolher boas libs + click, rich, test
- Dicas para escolher libs
- Click
- Rich
- Rich-Click
- Teste de comandos Click
-
TDD + Regex
- Programação orientada a testes
- Criando um validator de e-mails com Regex
- Gerando passwords randomicos
-
Criando um sistema de bancos de dados baseado em JSON + uso de mocking patch
- Modelando um banco de dados em JSON
- Transformando JSON em dict
- Gravando um dict em um arquivo JSON
- Criando um sistema de banco de dados que conecta em um JSON
-
Testando com pytest-forked e adicionando funcionalidades ao projeto
- Testes com banco de dados isolado
- Evitando race condition com pytest forked
-
Documentação com Mkdocs
- Os tipos de documentação
- Usando Mkdocs para construir docs
-
Empacotamento, semver e distribuição
- Semantic Versioning
- Build
- Adicionando arquivos estáticos ao build
- Empacotamento em egg e wheel
- Conectando no PyPI de testes
- Upload para o PyPI com twine
-
System Design
- Diagrama de camadas do sistema
-
Day 6 - Orientação a Objetos
-
Os paradigmas de programação
- Procedural
- Funcional
- Orientação a objetos
-
Introdução a Orientação a Objetos
- Classes
- __dict__
- Instancias
- Atributos
- Métodos
-
Inicialização de objetos
- Atributos de classe X de instância
- Construtor e Inicializador
- Atributos mutáveis
-
Os 4 Pilares da Orientação a Objetos
- Abstração
- Herança
- Polimorfismo
- Encapsulamento
-
Encapsulamento com propriedades
- Descriptors getter and setter
- Properties
- Name Mangling
-
Python Data Model e Protocolos
- Python Data Model e métodos __dunder__
- Protocolos
- Printable, Addible, Iterable, Container, Sized, Collection, Subscriptable
-
Python Moderno com Type Annotations e Dataclasses
- O que é o Python moderno
- Como a anotação de tipos pode ajudar a evitar problemas
- Quando usar typing?
- Anotando funções, classes e métodos
- Mypy
- Tipagem composta
- Type Alias
- Dataclasses
-
Dataclass abstrata, Enums, field e super()
- Abstração em dataclasses
- Enumerações para evitar erros
- Valores mutáveis em dataclasses
- quando usar super()
-
Structural Pattern Matching
- Pattern Match Estrutural
- Criando um "jogo" da tartaruga
-
Day 7 - Consumindo e armazenando dados.
-
Modelagem e validação com Pydantic
- Pydantic Vs Dataclasses
- Validation
- Serialização
-
Introdução a bancos de dados SQL
- SGBD - Sqlite, Postgres
- SQL estrutural
- SQL insert
- SQL consulta
- SQL update
- SQL delete
- Sessão e transactions
-
Conectando nosso projeto ao banco de dados
- Biblioteca embutida sqlite3
- Executando Queries
- ORM e SQLAlchemy
- Pydantic e SQLModel
-
DB Migrations e API REST
- Alembic
- MIGRATIONS
- Deserialização
- Urllib
- requests e httpx
-
Desafio do projeto
- Desafio final do Projeto
-
Day 8 - Demos - Web, API, Gui, Game, TUI
-
Interface Gráfica para Desktop
- Formulário com PySimpleGUI
-
Game Engine 2D
- Game com Pygame
-
Terminal User Interface
- TUI comTextual
-
Web sites com HTML e Flask
- Um Blog com Flask
-
API REST com FastAPI
- API com FastAPI
-
Aulas ao Vivo
- Aulas ao vivo regularmente
- aulas extra
- grupo no discord
- CursoDePython.com.br
- Treinamento Python BASE
Fundamentos de Programação com Python
É parte do pacote Python Expert
na Plataforma LINUXtips.io
Ministrado por Bruno Rocha
@rochacbruno
Tem 64 horas de aula em video
Muitos exercícios práticos
Certificado