|
| 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 | +deftest_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/) |