# Python
> [!NOTE] Python
>
> Python é uma linguagem de programação de alto nível, interpretada, de propósito geral, que se destaca pela sua simplicidade e legibilidade de código. É amplamente utilizada em diversas áreas, como desenvolvimento web, análise de dados, [[inteligência artificial]], automação, computação científica e muito mais.
>
> Algumas de suas características principais incluem:
> - Sintaxe clara e concisa: Facilita o aprendizado e a escrita de código.
> - Multiplataforma: Pode ser executada em diferentes sistemas operacionais (Windows, macOS, Linux).
> - Grande biblioteca padrão: Oferece módulos e funções para uma vasta gama de tarefas.
> - Comunidade ativa: Possui um grande número de desenvolvedores que contribuem com bibliotecas e suporte.
Para criar um arquivo em Python, você precisa nomeá-lo `<algo>.py` (`algo` neste caso é um espaço reservado, mude para o nome que desejar) e para executá-lo use `python <algo>.py` no terminal.
Um script Python simples de "Hello World" é escrito da seguinte forma:
```python
print('Hello, World')
```
**:: Referência ::** [Python](https://www.python.org/)
**:: Referência ::** [Site do Python (página de download)](https://www.python.org/downloads)
**:: Referência ::** [Site de documentação do Python](https://docs.python.org/3/)
# Conceitos de Python
## Conceitos básicos
Aqui estão alguns dos conceitos básicos de Python. A maioria deles pode ser encontrada em outras linguagens de programação.
* **[[Variáveis em Python]]**: Explica como atribuir valores e os tipos inferidos da linguagem, como `int`, `float`, `str`, `bool` e `NoneType`
* **[[Atribuição aumentada em Python]]**: Mostra operadores como `+=`, `-=`, `*=` para operações no mesmo local.
* **[[Operadores lógicos em Python]]**: Detalha o uso de `and`, `or`, `not` para construir testes lógicos .
* **[[Strings e formatação em Python]]**: Aborda strings como sequências de caracteres e métodos de formatação, incluindo f-strings .
* **[[Condições em Python]]**: Explica o uso de `if`, `else`, `elif` e operadores condicionais como `<`, `>=`, `==`, `!=`
* **[[Sequencias em Python]]**: Introduz os diferentes tipos de sequências (strings, listas, tuplas, conjuntos, dicionários) e suas propriedades de mutabilidade e ordenação.
* **[[Fatiamento em Python]]**: Descreve como extrair partes de sequências usando `range(start, stop, step)`
* **[[Laços em Python]]**: Apresenta os laços `for` e `while` para iteração, e como usar `break` e `continue` .
* **[[Funções em Python]]**: Detalha a definição de funções com `def`, argumentos múltiplos e arbitrários.
* **[[Módulos e bibliotecas em Python]]**: Explica como organizar e reutilizar código em arquivos separados usando `import` ou `from … import` .
* **[[Manipulação de arquivos em Python]]**: Mostra como abrir, ler e escrever arquivos usando a função `open` e a palavra-chave `with`.
* **[[Classes em Python]]**: Introduz a programação orientada a objetos, definindo classes e o método `__init__` .
* **[[Modificadores de operação em classes do Python]]**: Como redefinir o comportamento de operadores como `+` para objetos de classe.
* **[[Métodos são executados diretamente nas Classes em Python]]**: Uso de `@classmethod` para métodos que operam na classe em vez de instâncias .
* **[[Getters e setters são usados em classes no Python]]**: Como usar `@property` para controlar o acesso e a validação de atributos.
* **[[Decoradores em Python]]**: Funções de ordem superior que modificam outras funções, aplicadas com `@` .
* **[[Funções Lambda em Python]]**: Funções anônimas de uma linha, úteis para pequenas operações.
* **[[Exceções em Python]]**: Como lidar com erros usando `try`, `except` e `sys.exit()`
* **[[Métodos especiais em Python]]**: Métodos "dunder" como `__repr__`, `__add__`, `__mul__` que permitem que objetos interajam com operadores e funções embutidas.
* **[[Ambientes virtuais em Python]]**: A importância de isolar dependências de projetos usando `venv` e `pip freeze`/`pip install -r` .
* **[[Enumerações em Python]]**: Uso da função `enumerate` para iterar com índices e a classe `Enum` para criar tipos de dados especiais.
* **[[Tipos de erros em Python]]**: Uma lista de erros comuns como `AttributeError`, `ImportError`, `ValueError`, `SyntaxError`, entre outros.
## Conceitos intermediários
* **[[Ordenação em Python]]**: Métodos `list.sort()` e `sorted()` para ordenar sequências mutáveis e cópias, respectivamente.
* **[[Dicionário padrão em Python]]**: Uso de `collections.defaultdict` para simplificar a contagem de elementos em dicionários
* **[[Compreensão de listas em Python]]**: Uma forma concisa de criar listas a partir de iteráveis.
* **[[Map e Filter em Python]]**: Funções para aplicar uma função a cada item de um iterável ou filtrar itens, respectivamente [.
* **[[Gerador de expressões em Python]]**: Semelhante à compreensão de listas, mas os elementos são gerados sob demanda, economizando memória .
* **[[Desempacotar sequencias em Python]]**: Atribuir elementos de uma sequência a múltiplas variáveis, incluindo o uso de `*` para desempacotamento arbitrário .
* **[[Correspondência de padrões em Python]]**: Uso da instrução `match` para avaliar expressões com base em casos, incluindo desestruturação de dados.
* **[[Criando listas de listas em Python]]**: Alerta sobre o uso do operador `*` e a preferência por compreensão de listas para evitar referências ao mesmo objeto.
* **[[Compreensão de dicionários em Python]]**: Uma forma concisa de criar dicionários.
* **[[Asserções em Python]]**: Uso da palavra-chave `assert` para validar informações e levantar `AssertionError`
* **[[Zip em Python]]**: A função `zip()` para emparelhar elementos de múltiplos iteradores.
* **[[Anotações de tipo em Python]]**: Dicas de tipo (`type hints`) para melhorar a legibilidade, documentação e análise estática do código.
* **[[Operadores de deslocamento em Python]]**: Operadores bit a bit `<<` (deslocamento para a esquerda) e `>>` (deslocamento para a direita).
# Bibliotecas, frameworks e ferramentas
* **Bibliotecas Nativas**:
* **[[Biblioteca Collections em Python]]**: Tipos de dados alternativos como `namedtuple`, `deque`, `defaultdict`
* **[[Biblioteca Re em Python]]**: Para operações com [[Expressões regulares]]
* **[[Biblioteca Random em Python]]**: Funções para gerar números pseudoaleatórios
* **[[Itertools library in Python]]**: Implementa vários iteradores eficientes como `product`, `permutations`, `combinations`
* **[[Biblioteca SQLite3 em Python]]**: Interface para bancos de dados [[Linguagem de Consulta Estruturada|SQL]]
* **[[Biblioteca CSV em Python]]**: Para leitura e escrita de arquivos [[Valores separados por vírgulas|CSV]]
* **[[Biblioteca Pydantic no Python]]**: Para validação de dados e gerenciamento de configurações usando _type hints_.
* **Bibliotecas de Terceiros**:
* **[[Biblioteca Pandas em Python]]**: Ferramenta poderosa para análise e manipulação de dados.
* **[[Biblioteca Paho MQTT em Python]]**: Implementa o protocolo [[MQTT]] para comunicação com brokers.
* **[[Biblioteca Python-can em Python]]**: Suporte a [[Rede de área de controlador|redes CAN]].
* **[[Biblioteca CANtools em Python]]**: Biblioteca para interfacear com [[Rede de área de controlador|redes CAN]], incluindo análise de arquivos DBC e codificação/decodificação de mensagens .
* **Frameworks**:
* **[[FastAPI]]**: Framework web moderno e rápido para construir APIs com Python.
* **[[MicroPython]]**: Implementação de Python 3 para microcontroladores e dispositivos embarcados, como [[ESP32]] .
* **[[Framework Flask]]**: Framework de desenvolvimento web leve e de código aberto.
* **Ferramentas**:
* **[[Pyenv]]**: Ferramenta para gerenciar múltiplas versões do Python .
* **[[Thonny]]**: IDE Python projetada para iniciantes, com depurador passo a passo e visualização de variáveis .
* **[[Jupyter notebooks]]**: Ferramenta para criar fluxos de trabalho iterativos e reproduzíveis, combinando código e texto de marcação .
# Exemplos de scripts e aplicações
* **[[Função para gerar matriz de zeros em Python]]**: Um script básico que demonstra o uso de laços e listas para criar uma matriz.
* **[[Busca linear em Python]]**: Implementação do [[Algoritmo de busca linear]]
* **[[Primeiros passos na ESP32 com Micropython e Thonny]]**: Um tutorial prático que mostra como usar [[Thonny]] para gravar firmware [[MicroPython]] em um [[ESP32]] e controlar um [[Diodo emissor de luz|LED]]