1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220# Playground y Cheatsheet para aprender Python
[](https://travis-ci.org/trekhleb/learn-python)
> Esta es una colección de scripts de Python divididos en [categorías](#contenido) que contienen
ejemplos de código con sus explicaciones, diferentes usos y links a recursos adicionales.
> _Lee esto en:_ [_Inglés_](README.md), [_Portugués_](README.pt-BR.md), _Traditional Chinese_](README.zh-TW.md).
Es un **playground** ya que puedes cambiar o añadir cosas al código para ver
cómo funciona y [probarlo](#probando-el-código) usando aserciones. También puedes
[revisar el código](#revisando-el-código) que has escrito y averiguar si está acorde con
la guía de estilos de Python. Todo esto, en conjunto, puede hacer que tu proceso de aprendizaje
sea más interactivo y puede ayudarte a mantener la calidad del código muy alta desde el principio.
Es un **cheatsheet** porque puedes regresar y revisar los ejemplos de código para
fortalecer tus conocimientos sobre las [sentencias y contrucciones estándar de Python](#contenido).
Además, ya que el código tiene muchas aserciones, podrás ver el resultado de las funciones/sentencias en el mismo
código sin la necesidad de ejecutarlos.
> _También puede interesarte 🤖 [Interactive Machine Learning Experiments](https://github.com/trekhleb/machine-learning-experiments)_
## Cómo usar este repositorio
Cada script de Python en este repositorio sigue la estructura:
```python
"""Lists <--- Nombre del tema
# @see: https://www.learnpython.org/en/Lists <-- Link a recurso adicional
Aquí puede haber una explicación detallada del tema en concreto (ej: información general sobre listas).
"""
def test_list_type():
"""Explicación del sub-tema.
Cada archivo contiene funciones de prueba que muestran sub-temas (ej: tipos de listas, métodos en listas).
"""
# Este es un ejemplo de cómo construir una lista. <-- Estos comentarios explican el procedimiento
squares = [1, 4, 9, 16, 25]
# Las listas pueden ser indexadas y cortadas.
# Al indexar devuelve el item.
assert squares[0] == 1 # <-- Estas aserciones muestran el resultado.
# Al cortar devuelve una nueva lista.
assert squares[-3:] == [9, 16, 25] # <-- Estas aserciones muestran el resultado.
```
Normalmente, querrás hacer lo siguiente:
- [Encontrar el tema](#contenido) que quieres aprender o revisar.
- Leer los comentarios y/o la documentación que está escrita en cada docstring del script (toma como ejemplo el script de arriba).
- Ver los ejemplos de código y las aserciones para conocer diferentes maneras de usar el código y entender el resultado previsto.
- Cambiar el código o añadir nuevas aserciones para ver cómo funcionan las cosas.
- [Probar](#probando-el-código) y [revisar](#revisando-el-código) el código para ver si funciona y si está escrito
correctamente.
## Contenido
1. **Empezando**
- [¿Qué es Python?](src/getting_started/what_is_python.md)
- [Sintaxis de Python](src/getting_started/python_syntax.md)
- [Variables](src/getting_started/test_variables.py)
2. **Operadores**
- [Operadores aritméticos](src/operators/test_arithmetic.py) (`+`, `-`, `*`, `/`, `//`, `%`, `**`)
- [Operadores Bitwise](src/operators/test_bitwise.py) (`&`, `|`, `^`, `>>`, `<<`, `~`)
- [Operadores de atribución](src/operators/test_assigment.py) (`=`, `+=`, `-=`, `/=`, `//=` etc.)
- [Operadores de comparación](src/operators/test_comparison.py) (`==`, `!=`, `>`, `<`, `>=`, `<=`)
- [Operadores lógicos](src/operators/test_logical.py) (`and`, `or`, `not`)
- [Operadores de identidad](src/operators/test_identity.py) (`is`, `is not`)
- [Operadores de asociación](src/operators/test_membership.py) (`in`, `not in`)
3. **Tipos de datos**
- [Números](src/data_types/test_numbers.py) (incluyendo booleans)
- [Strings](src/data_types/test_strings.py) y sus métodos
- [Listas](src/data_types/test_lists.py) y sus métodos (incluyendo comprensión de listas)
- [Tuples](src/data_types/test_tuples.py)
- [Sets](src/data_types/test_sets.py) y sus métodos
- [Diccionarios](src/data_types/test_dictionaries.py)
- [Tipo de casting](src/data_types/test_type_casting.py)
4. **Control de flujo**
- [La sentencia `if`](src/control_flow/test_if.py)
- [La sentencia `for`](src/control_flow/test_for.py) (y la función `range()`)
- [La sentencia `while`](src/control_flow/test_while.py)
- [La sentencia `try`](src/control_flow/test_try.py)
- [La sentencia `break`](src/control_flow/test_break.py)
- [La sentencia `continue`](src/control_flow/test_continue.py)
5. **Funciones**
- [Definición de función](src/functions/test_function_definition.py) (sentencias `def` y `return`)
- [Ámbito de variables dentro de funciones](src/functions/test_function_scopes.py) (sentencias `global` y `nonlocal`)
- [Valores de argumento predeterminados](src/functions/test_function_default_arguments.py)
- [Argumentos de palabras clave](src/functions/test_function_keyword_arguments.py)
- [Listas de argumento arbitrario](src/functions/test_function_arbitrary_arguments.py)
- [Listas de argumentos en funciones](src/functions/test_function_unpacking_arguments.py) (sentencias `*` y `**`)
- [Expresiones Lambda](src/functions/test_lambda_expressions.py) (sentencia `lambda`)
- [Strings de documentación](src/functions/test_function_documentation_string.py)
- [Anotaciones en funciones](src/functions/test_function_annotations.py)
- [Decoradores de funciones](src/functions/test_function_decorators.py)
6. **Clases**
- [Definición de clase](src/classes/test_class_definition.py) (sentencia `class`)
- [Objetos de clase](src/classes/test_class_objects.py)
- [Objetos de instancia](src/classes/test_instance_objects.py)
- [Métodos de objetos](src/classes/test_method_objects.py)
- [Variables de clase y de instancia](src/classes/test_class_and_instance_variables.py)
- [Herencia](src/classes/test_inheritance.py)
- [Herencia múltiple](src/classes/test_multiple_inheritance.py)
7. **Módulos**
- [Módulos](src/modules/test_modules.py) (sentencia `import`)
- [Paquetes](src/modules/test_packages.py)
8. **Errores y excepciones**
- [Controlando excepciones](src/exceptions/test_handle_exceptions.py) (sentencia `try`)
- [Generando excepciones](src/exceptions/test_raise_exceptions.py) (sentencia `raise`)
9. **Archivos**
- [Leyendo y escribiendo](src/files/test_file_reading.py) (sentencia `with`)
- [Métodos de objetos de archivo](src/files/test_file_methods.py)
10. **Adicionales**
- [La sentencia `pass`](src/additions/test_pass.py)
- [Generadores](src/additions/test_generators.py) (sentencia `yield`)
11. **Pequeño tour de las librerías estándar**
- [Serialización](src/standard_libraries/test_json.py) (librería `json`)
- [Parámetros en archivos](src/standard_libraries/test_glob.py) (librería `glob`)
- [Expresiones regulares](src/standard_libraries/test_re.py) (librearía `re`)
- [Matemática](src/standard_libraries/test_math.py) (librerías `math`, `random` y `statistics`)
- [Fechas y horas](src/standard_libraries/test_datetime.py) (librería `datetime`)
- [Compresión de datos](src/standard_libraries/test_zlib.py) (librearía `zlib`)
## Pre-requisitos
**Instalando Python**
Asegúrate de que tienes [Python3 instalado](https://realpython.com/installing-python/) en tu sistema.
Podrías utilizar la librería estándar [venv](https://docs.python.org/es/3/library/venv.html) para crear
entornos virtuales y tener Python, pip y todos los paquetes instalados en el directorio de tu
proyecto local para evitar cometer errores con paquetes del sistema y sus versiones.
Dependiendo de la instalación, tendrás acceso a Python3 ejecutando `python` o `python3`. Lo mismo
aplica para el administrador de paquetes pip - puedes tener acceso a él ejecutando `pip` o `pip3`.
Puedes ver tu versión actual de Python ejecutando:
```bash
python --version
```
Ten en cuenta que cuando leas `python` en este repositorio, se asume que es Python **3**.
**Instalando dependencias**
Instala todas las depencias requeridas para el proyecto ejecutando:
```bash
pip install -r requirements.txt
```
## Probando el código
Las pruebas son hechas usando el framework [pytest](https://docs.pytest.org/en/latest/).
Puedes añadir más pruebas por ti mismo añadiendo archivos y funciones con el prefijo `test_`
(ej: `test_topic.py` con la función `def test_sub_topic()` adentro).
Para ejecutar todas las pruebas, por favor escribe el siguiente comando desde el directorio
raíz del proyecto:
```bash
pytest
```
Para ejecutar diferentes pruebas escribe:
```bash
pytest ./path/to/the/test_file.py
```
## Revisando el código
La revisión del código está hecha usando las librerías [pylint](http://pylint.pycqa.org/) y [flake8](http://flake8.pycqa.org/en/latest/).
### PyLint
Para revisar si el código sigue la guía de estilos
[PEP 8](https://www.python.org/dev/peps/pep-0008/), por favor ejecuta:
```bash
pylint ./src/
```
En caso de que linter detecte un error (ej: `missing-docstring`), te recomiendo leer más sobre
el error concreto ejecutando:
```bash
pylint --help-msg=missing-docstring
```
[Más sobre PyLint](http://pylint.pycqa.org/)
### Flake8
Para revisar si el código sigue la guía de estilos
[PEP 8](https://www.python.org/dev/peps/pep-0008/), por favor ejecuta:
```bash
flake8 ./src
```
O, si quieres ver un output más detallado, ejecuta:
```bash
flake8 ./src --statistics --show-source --count
```
[Más sobre Flake8](http://flake8.pycqa.org/en/latest/)
## Apoya al proyecto
Puedes apoyar al proyecto a través de ❤️️ [GitHub](https://github.com/sponsors/trekhleb) o ❤️️ [Patreon](https://www.patreon.com/trekhleb).