|
| 1 | +# Playground e Cheatsheet Para Aprender Python |
| 2 | + |
| 3 | +[](https://travis-ci.org/trekhleb/learn-python) |
| 4 | + |
| 5 | +> Essa é uma coleção de scripts Python dividida em [tópicos](#índice) que contém |
| 6 | +exemplos de código com explicações, diferentes usos e links para outras leituras. |
| 7 | + |
| 8 | +_Ler em_ [_English_](README.md) |
| 9 | + |
| 10 | +É um **playground** porque você pode fazer alterações no código para ver como ele se comporta, |
| 11 | +além de [testá-lo](#testando-o-código) usando asserções. Também é possível |
| 12 | +[revisar o código](#revisando-o-código) que você escreveu automaticamente e verificar se ele se encaixa |
| 13 | +no guia de estilo de código Python. |
| 14 | +Isso tudo pode tornar seu processo de aprendizagem mais interativo e ajudar a manter a qualidade |
| 15 | +do código bastante alta desde o início. |
| 16 | + |
| 17 | +É um **cheatsheet** porque você pode voltar a esses exemplos de código quando quiser recapitular a sintaxe das |
| 18 | +[estruturas padrão do Python](#índice). O código está cheio de asserções, então você poderá ver o retorno das funções sem precisar executá-las. |
| 19 | + |
| 20 | +> _Você pode se interessar também por 🤖 [Interactive Machine Learning Experiments](https://github.com/trekhleb/machine-learning-experiments)_ |
| 21 | +
|
| 22 | +## Como Usar Esse Repositório |
| 23 | + |
| 24 | +Nesse repositório, cada script Python possui a seguinte estrutura: |
| 25 | + |
| 26 | +```python |
| 27 | +"""Lists <--- Nome do tópico |
| 28 | +
|
| 29 | +# @see: https://www.learnpython.org/en/Lists <-- Link para outras leituras. |
| 30 | +
|
| 31 | +A seguir, uma explicação mais detalhada do tópico atual (ex, informações gerais sobre listas (Lists)). |
| 32 | +""" |
| 33 | + |
| 34 | + |
| 35 | +def test_list_type(): |
| 36 | + """Explicação do subtópico. |
| 37 | + |
| 38 | + Cada arquivo contém funções de teste que ilustram subtópicos (ou seja, tipo de lista, métodos de lista). |
| 39 | + """ |
| 40 | + |
| 41 | + # Here is an example of how to build a list. <-- Comentários em inglês explicam a ação. |
| 42 | + squares = [1, 4, 9, 16, 25] |
| 43 | + |
| 44 | + # Lists can be indexed and sliced. |
| 45 | + # Indexing returns the item. |
| 46 | + assert squares[0] == 1 # <-- As asserções ilustram o resultado. |
| 47 | + # Slicing returns a new list. |
| 48 | + assert squares[-3:] == [9, 16, 25] # <-- As asserções ilustram o resultado. |
| 49 | +``` |
| 50 | + |
| 51 | +Então você pode querer fazer o seguinte: |
| 52 | + |
| 53 | +- [Encontrar o tópico](#índice) que deseja aprender ou recapitular. |
| 54 | +- Ler os comentários e/ou a documentação vinculada em cada script (como no exemplo acima). |
| 55 | +- Analisar os exemplos e asserções para ver exemplos de uso e saída esperada das funções. |
| 56 | +- Alterar o código ou adicionar novas asserções para ver o que acontece. |
| 57 | +- [Executar testes](#testando-o-código) e [revisar o código](#revisando-o-código) para ver se ele |
| 58 | +funciona e para saber se está escrito corretamente. |
| 59 | + |
| 60 | +## Índice |
| 61 | + |
| 62 | +1. **Começando** |
| 63 | + - [O que é Python](src/getting_started/what_is_python.md) |
| 64 | + - [Sintaxe Python](src/getting_started/python_syntax.md) |
| 65 | + - [Variáveis](src/getting_started/test_variables.py) |
| 66 | +2. **Operators** |
| 67 | + - [Operadores Aritméticos](src/operators/test_arithmetic.py) (`+`, `-`, `*`, `/`, `//`, `%`, `**`) |
| 68 | + - [Operadores Bitwise](src/operators/test_bitwise.py) (`&`, `|`, `^`, `>>`, `<<`, `~`) |
| 69 | + - [Operadores de Atribuição](src/operators/test_assigment.py) (`=`, `+=`, `-=`, `/=`, `//=` etc.) |
| 70 | + - [Operadores de Comparação](src/operators/test_comparison.py) (`==`, `!=`, `>`, `<`, `>=`, `<=`) |
| 71 | + - [Operadores Lógicos](src/operators/test_logical.py) (`and`, `or`, `not`) |
| 72 | + - [Operadores de Indentidade](src/operators/test_identity.py) (`is`, `is not`) |
| 73 | + - [Operadores de Associação](src/operators/test_membership.py) (`in`, `not in`) |
| 74 | +3. **Tipos de Dados** |
| 75 | + - [Números](src/data_types/test_numbers.py) (incluindo boleanos) |
| 76 | + - [Strings](src/data_types/test_strings.py) e seus métodos |
| 77 | + - [Listas](src/data_types/test_lists.py) e seus métodos (incluindo lista de compreensões) |
| 78 | + - [Tuplas](src/data_types/test_tuples.py) |
| 79 | + - [Conjuntos](src/data_types/test_sets.py) e seus métodos |
| 80 | + - [Dicionários](src/data_types/test_dictionaries.py) |
| 81 | + - [Casting de Tipo](src/data_types/test_type_casting.py) |
| 82 | +4. **Controles de Fluxo** |
| 83 | + - [A declaração `if`](src/control_flow/test_if.py) |
| 84 | + - [A declaração `for`](src/control_flow/test_for.py) (e a função `range()`) |
| 85 | + - [A declaração `while`](src/control_flow/test_while.py) |
| 86 | + - [A declaração `try`](src/control_flow/test_try.py) |
| 87 | + - [A declaração `break`](src/control_flow/test_break.py) |
| 88 | + - [A declaração `continue`](src/control_flow/test_continue.py) |
| 89 | +5. **Funções** |
| 90 | + - [Definição de Função](src/functions/test_function_definition.py) (declaração `def` e `return`) |
| 91 | + - [Variáveis Dentro das Funções](src/functions/test_function_scopes.py) (declaração `global` e `nonlocal`) |
| 92 | + - [Valores Padrão de Argumentos](src/functions/test_function_default_arguments.py) |
| 93 | + - [Argumentos de palavras-chave](src/functions/test_function_keyword_arguments.py) |
| 94 | + - [Listas de Argumento Arbitrárias](src/functions/test_function_arbitrary_arguments.py) |
| 95 | + - [Desfazendo Lista de Argumentos](src/functions/test_function_unpacking_arguments.py) (declaração `*` e `**`) |
| 96 | + - [Expressões Lambda](src/functions/test_lambda_expressions.py) (declaração `lambda`) |
| 97 | + - [Documentação das Strings](src/functions/test_function_documentation_string.py) |
| 98 | + - [Função de Anotações](src/functions/test_function_annotations.py) |
| 99 | + - [Função de Decoradores](src/functions/test_function_decorators.py) |
| 100 | +6. **Classes** |
| 101 | + - [Definição de Classe](src/classes/test_class_definition.py) (declaração `class`) |
| 102 | + - [Classes dos Objetos](src/classes/test_class_objects.py) |
| 103 | + - [Instância dos Objetos](src/classes/test_instance_objects.py) |
| 104 | + - [Métodos de Objetos](src/classes/test_method_objects.py) |
| 105 | + - [Variável de Classe e Instância](src/classes/test_class_and_instance_variables.py) |
| 106 | + - [Herança](src/classes/test_inheritance.py) |
| 107 | + - [Herança Múltipla](src/classes/test_multiple_inheritance.py) |
| 108 | +7. **Módulos** |
| 109 | + - [Módulos](src/modules/test_modules.py) (declaração `import`) |
| 110 | + - [Pacotes](src/modules/test_packages.py) |
| 111 | +8. **Erros e Exceções** |
| 112 | + - [Tratando Exceções](src/exceptions/test_handle_exceptions.py) (declaração `try`) |
| 113 | + - [Levantando Exceções](src/exceptions/test_raise_exceptions.py) (declaração `raise`) |
| 114 | +9. **Arquivos** |
| 115 | + - [Lendo e Escrevendo](src/files/test_file_reading.py) (declaração `with`) |
| 116 | + - [Métodos de Objetos de Arquivos](src/files/test_file_methods.py) |
| 117 | +10. **Adicional** |
| 118 | + - [A declaração `pass`](src/additions/test_pass.py) |
| 119 | + - [Geradores](src/additions/test_generators.py) (declaração `yield`) |
| 120 | +11. **Algumas Bibliotecas Padrão** |
| 121 | + - [Serialization](src/standard_libraries/test_json.py) (biblioteca `json`) |
| 122 | + - [File Wildcards](src/standard_libraries/test_glob.py) (biblioteca `glob`) |
| 123 | + - [String Pattern Matching](src/standard_libraries/test_re.py) (biblioteca `re`) |
| 124 | + - [Mathematics](src/standard_libraries/test_math.py) (bibliotecas `math`, `random` e `statistics`) |
| 125 | + - [Tempo e Datas](src/standard_libraries/test_datetime.py) (biblioteca `datetime`) |
| 126 | + - [Compressão de dados](src/standard_libraries/test_zlib.py) (biblioteca `zlib`) |
| 127 | + |
| 128 | +## Pré-requisitos |
| 129 | + |
| 130 | +**Instalando o Python** |
| 131 | + |
| 132 | +Certifique-se de ter o [Python3 instalado](https://realpython.com/installing-python/) em sua máquina. |
| 133 | + |
| 134 | +Você pode usar a biblioteca padrão do Python [venv](https://docs.python.org/3/library/venv.html) |
| 135 | +para criar ambientes virtuais e ter o Python, pip e todos os outros pacotes a serem instalados |
| 136 | + a partir do diretório local do projeto para evitar mexer com pacotes externos ou do sistema. |
| 137 | + |
| 138 | +Dependendo da sua instalação, você pode ter acesso ao interpretador Python3 executando `python` ou `python3`. O mesmo vale para o gerenciador de pacotes pip, você pode acessá-lo executando `pip` ou `pip3`. |
| 139 | + |
| 140 | +Você pode ver a versão do seu Python executando: |
| 141 | + |
| 142 | +```bash |
| 143 | +python --version |
| 144 | +``` |
| 145 | + |
| 146 | +Observe que neste repositório sempre que você vê o `python`, será assumido que é o Python **3**. |
| 147 | + |
| 148 | +**Instalando dependências** |
| 149 | + |
| 150 | +Instale todas as dependências necessárias para o projeto executando: |
| 151 | + |
| 152 | +```bash |
| 153 | +pip install -r requirements.txt |
| 154 | +``` |
| 155 | + |
| 156 | +## Testando o Código |
| 157 | + |
| 158 | +Testes são feitos usando o framework [pytest](https://docs.pytest.org/en/latest/). |
| 159 | + |
| 160 | +Você pode adicionar novos testes criando arquivos e funções com o prefixo `test_` |
| 161 | +(ex. `test_topic.py` com a função `def test_sub_topic()` dentro). |
| 162 | + |
| 163 | +Para executar todos os testes, execute o seguinte comando na pasta raiz do projeto: |
| 164 | + |
| 165 | +```bash |
| 166 | +pytest |
| 167 | +``` |
| 168 | + |
| 169 | +Para executar testes específicos, execute: |
| 170 | + |
| 171 | +```bash |
| 172 | +pytest ./path/to/the/test_file.py |
| 173 | +``` |
| 174 | + |
| 175 | +## Revisando o Código |
| 176 | + |
| 177 | +A revisão é feita usando as bibliotecas [pylint](http://pylint.pycqa.org/) e [flake8](http://flake8.pycqa.org/en/latest/). |
| 178 | + |
| 179 | +### PyLint |
| 180 | + |
| 181 | +Para verificar se o código está escrito de acordo com o guia de estilo |
| 182 | +do [PEP 8](https://www.python.org/dev/peps/pep-0008/), execute: |
| 183 | + |
| 184 | +```bash |
| 185 | +pylint ./src/ |
| 186 | +``` |
| 187 | + |
| 188 | +Caso o pylint detecte um erro (ex. `missing-docstring`), convém ler mais sobre erros específicos executando: |
| 189 | + |
| 190 | +```bash |
| 191 | +pylint --help-msg=missing-docstring |
| 192 | +``` |
| 193 | + |
| 194 | +[Saber mais sobre PyLint](http://pylint.pycqa.org/) |
| 195 | + |
| 196 | +### Flake8 |
| 197 | + |
| 198 | +Para verificar se o código está escrito de acordo com o guia de estilo |
| 199 | +do [PEP 8](https://www.python.org/dev/peps/pep-0008/), execute: |
| 200 | + |
| 201 | +```bash |
| 202 | +flake8 ./src |
| 203 | +``` |
| 204 | + |
| 205 | +Ou, se você quiser uma saída mais detalhada, execute: |
| 206 | + |
| 207 | +```bash |
| 208 | +flake8 ./src --statistics --show-source --count |
| 209 | +``` |
| 210 | + |
| 211 | +[Saber mais sobre Flake8](http://flake8.pycqa.org/en/latest/) |
0 commit comments