Content for Decem's Python course.
1{
2 "cells": [
3 {
4 "cell_type": "markdown",
5 "metadata": {
6 "slideshow": {
7 "slide_type": "slide"
8 }
9 },
10 "source": [
11 "# Curso de Python"
12 ]
13 },
14 {
15 "cell_type": "markdown",
16 "metadata": {
17 "slideshow": {
18 "slide_type": "slide"
19 }
20 },
21 "source": [
22 "## 1. Introducción al lenguaje de Programación Python."
23 ]
24 },
25 {
26 "cell_type": "markdown",
27 "metadata": {
28 "slideshow": {
29 "slide_type": "slide"
30 }
31 },
32 "source": [
33 "Python es un lenguaje de programación interpretado, interactivo y orientado a\n",
34 "objetos. Incorpora módulos, excepciones, tipado dinámico, tipos de datos\n",
35 "dinámicos de muy alto nivel y clases."
36 ]
37 },
38 {
39 "cell_type": "markdown",
40 "metadata": {
41 "slideshow": {
42 "slide_type": "slide"
43 }
44 },
45 "source": [
46 "### Breve historia\n",
47 "\n",
48 "Lenguaje creado por Guido van Rossum, que empezó su implementación a finales de 1989, y la primera versión pública, Python 0.9, fue liberada en febrero de 1991. El nombre \"Python\" viene dado por la afición de Van Rossum al grupo Monty Python.\n",
49 "\n",
50 "Python se desarrolla bajo una licencia open source, aprobada por la OSI, haciendo que sea libre de ser usado y distribuido, incluso para uso comercial. La licencia de Python es administrada por la Python Software Foundation.\n",
51 "\n",
52 "En agosto de 2019, Python se encuentra como el tercer lenguaje en popularidad, según el [índice TIOBE](https://www.tiobe.com/tiobe-index//?6671423=1), sólo detrás de Java, C y superando a C++."
53 ]
54 },
55 {
56 "cell_type": "markdown",
57 "metadata": {
58 "slideshow": {
59 "slide_type": "slide"
60 }
61 },
62 "source": [
63 "### Python 2 y Python 3\n",
64 "\n",
65 "Actualmente existen dos ramas principales de Python, la que corresponde a la versión 2.x y a la versión 3.x. Python 3.0 fue liberada en 2008, y la ultima versión de la Python 2, la 2.7, a mediados de 2010, y no va a tener más versiones después de esta.\n",
66 "\n",
67 "La rama 3.x está siendo desarrollada de forma activa, llevando ya más de 5 años de versiones estables, incluyendo la 3.3 en 2012, la 3.4 en 2014, la 3.5 en 2015 y la 3.6 en 2016.\n",
68 "\n",
69 "Por otro lado, Python 2.7 no tendrá soporte [más allá de 2020](https://pythonclock.org/), por lo que si estamos aprendiendo ahora Python, el lugar correcto para empezar es, sin duda alguna, la última versión de Python 3.\n"
70 ]
71 },
72 {
73 "cell_type": "markdown",
74 "metadata": {
75 "slideshow": {
76 "slide_type": "slide"
77 }
78 },
79 "source": [
80 "### El intérprete\n",
81 "\n",
82 "Python tiene un intérprete interactivo o *REPL* (Read Evaluate Print Loop), que permite usar el lenguaje de forma interactiva. Para ejecutarlo, sólo tenemos que escribir `python` o `python3`(según como esté instalado) en una terminal.\n",
83 "\n",
84 "```\n",
85 "$ python\n",
86 "Python 3.7.1 (default, Nov 6 2018, 18:46:03)\n",
87 "[Clang 10.0.0 (clang-1000.11.45.5)] on darwin\n",
88 "Type \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n",
89 ">>>\n",
90 "```"
91 ]
92 },
93 {
94 "cell_type": "markdown",
95 "metadata": {
96 "slideshow": {
97 "slide_type": "slide"
98 }
99 },
100 "source": [
101 "Existen diferentes intérpretes de Python, escritos en otros lenguales, cada uno con sus características, algunos ejemplos son:\n",
102 "\n",
103 "- CPython, escito en C\n",
104 "- IronPython, escrito en .NET\n",
105 "- PyPy, escrito en Python\n",
106 "- Jython, escrito en Java"
107 ]
108 },
109 {
110 "cell_type": "markdown",
111 "metadata": {
112 "slideshow": {
113 "slide_type": "fragment"
114 }
115 },
116 "source": [
117 "Nosotros nos centraremos en **CPython**, el intérprete más usado."
118 ]
119 },
120 {
121 "cell_type": "markdown",
122 "metadata": {
123 "slideshow": {
124 "slide_type": "slide"
125 }
126 },
127 "source": [
128 "### Ejecutar programas\n",
129 "\n",
130 "Los programas escritos en Python se suelen almacenar en ficheros de texto con extensión `.py`. Para ejecutar un programa de Python desde una terminal, por ejemplo uno llamado `hola.py` bastaría con usar el siguiente comando:\n",
131 "\n",
132 "```\n",
133 "$ python3 hola.py\n",
134 "```\n"
135 ]
136 },
137 {
138 "cell_type": "markdown",
139 "metadata": {
140 "slideshow": {
141 "slide_type": "slide"
142 }
143 },
144 "source": [
145 "### El lenguaje\n",
146 "\n",
147 "- La frase que mejor define el lenguaje y que siempre hay que tener en cuenta es que **todo es un objeto en Python**.\n",
148 "- Busca maximizar la legibilidad del código.\n",
149 "- Las librerías estándar proporcionan mucha funcionalidad, se dice que es un lenguaje que **viene con las pilas incluidas**."
150 ]
151 },
152 {
153 "cell_type": "markdown",
154 "metadata": {
155 "slideshow": {
156 "slide_type": "slide"
157 }
158 },
159 "source": [
160 "#### El Zen de Python\n",
161 "\n",
162 "Existen 19 principios básicos del diseño de Python, lo que llamamos el Zen de Python.\n"
163 ]
164 },
165 {
166 "cell_type": "code",
167 "execution_count": 1,
168 "metadata": {
169 "slideshow": {
170 "slide_type": "slide"
171 }
172 },
173 "outputs": [
174 {
175 "name": "stdout",
176 "output_type": "stream",
177 "text": [
178 "The Zen of Python, by Tim Peters\n",
179 "\n",
180 "Beautiful is better than ugly.\n",
181 "Explicit is better than implicit.\n",
182 "Simple is better than complex.\n",
183 "Complex is better than complicated.\n",
184 "Flat is better than nested.\n",
185 "Sparse is better than dense.\n",
186 "Readability counts.\n",
187 "Special cases aren't special enough to break the rules.\n",
188 "Although practicality beats purity.\n",
189 "Errors should never pass silently.\n",
190 "Unless explicitly silenced.\n",
191 "In the face of ambiguity, refuse the temptation to guess.\n",
192 "There should be one-- and preferably only one --obvious way to do it.\n",
193 "Although that way may not be obvious at first unless you're Dutch.\n",
194 "Now is better than never.\n",
195 "Although never is often better than *right* now.\n",
196 "If the implementation is hard to explain, it's a bad idea.\n",
197 "If the implementation is easy to explain, it may be a good idea.\n",
198 "Namespaces are one honking great idea -- let's do more of those!\n"
199 ]
200 }
201 ],
202 "source": [
203 "import this"
204 ]
205 },
206 {
207 "cell_type": "markdown",
208 "metadata": {
209 "slideshow": {
210 "slide_type": "slide"
211 }
212 },
213 "source": [
214 "- Hermoso es mejor que feo.\n",
215 "- Explícito es mejor que implícito.\n",
216 "- Simple es mejor que complejo.\n",
217 "- Complejo es mejor que complicado.\n",
218 "- Sencillo es mejor que anidado.\n",
219 "- Escaso es mejor que denso.\n",
220 "- La legibilidad cuenta.\n",
221 "- Los casos especiales no son lo suficientemente especiales para romper las reglas.\n",
222 "- Lo práctico le gana a la pureza.\n",
223 "- Los errores no debe pasar en silencio.\n",
224 "- A menos que sean silenciados."
225 ]
226 },
227 {
228 "cell_type": "markdown",
229 "metadata": {
230 "slideshow": {
231 "slide_type": "slide"
232 }
233 },
234 "source": [
235 "- En cara a la ambigüedad, rechazar la tentación de adivinar.\n",
236 "- Debe haber una - y preferiblemente sólo una - manera obvia de hacerlo.\n",
237 "- Aunque esa manera puede no ser obvia en un primer momento a menos que seas holandés.\n",
238 "- Ahora es mejor que nunca.\n",
239 "- Aunque \"nunca\" es a menudo mejor que \"ahora mismo\".\n",
240 "- Si la aplicación es difícil de explicar, es una mala idea.\n",
241 "- Si la aplicación es fácil de explicar, puede ser una buena idea.\n",
242 "- Los espacios de nombres son una gran idea ¡hay que hacer más de eso!\n"
243 ]
244 },
245 {
246 "cell_type": "markdown",
247 "metadata": {
248 "slideshow": {
249 "slide_type": "slide"
250 }
251 },
252 "source": [
253 "#### ¡Hola mundo!"
254 ]
255 },
256 {
257 "cell_type": "code",
258 "execution_count": 2,
259 "metadata": {
260 "slideshow": {
261 "slide_type": "fragment"
262 }
263 },
264 "outputs": [
265 {
266 "name": "stdout",
267 "output_type": "stream",
268 "text": [
269 "¡Hola mundo!\n"
270 ]
271 }
272 ],
273 "source": [
274 "print(\"¡Hola mundo!\")"
275 ]
276 },
277 {
278 "cell_type": "markdown",
279 "metadata": {
280 "slideshow": {
281 "slide_type": "slide"
282 }
283 },
284 "source": [
285 "#### Comentarios\n",
286 "\n",
287 "En Python hay dos tipos de comentarios:\n",
288 "\n",
289 "- Los de una línea, que empiezan por `#`\n",
290 "- Los multilíneas, o `docstrings` que estarán entre tres comillas, simples o dobles (`\"\"\"...\"\"\"`).\n",
291 "\n",
292 "```python\n",
293 "# Esto es un comentario\n",
294 "\n",
295 "def func():\n",
296 " \"\"\"Esto es un docstring\"\"\"\n",
297 " pass\n",
298 "```"
299 ]
300 },
301 {
302 "cell_type": "markdown",
303 "metadata": {
304 "slideshow": {
305 "slide_type": "slide"
306 }
307 },
308 "source": [
309 "#### Valor nulo\n",
310 "\n",
311 "El valor nulo se representa mediante la palabra reservada `None`.\n"
312 ]
313 },
314 {
315 "cell_type": "markdown",
316 "metadata": {
317 "slideshow": {
318 "slide_type": "slide"
319 }
320 },
321 "source": [
322 "#### Bloques\n",
323 "\n",
324 "Python define los bloques de código mediante la indentación. Todo aquello que tiene el mismo nivel de indentación pertenece al mismo bloque de código.\n",
325 "\n",
326 "```python\n",
327 "if condition:\n",
328 " # Si la condición es cierta\n",
329 " call_to_some_complicated_stuff()\n",
330 "\n",
331 "# Fuera del condicional\n",
332 "do_always_the_same_stuff()\n",
333 "```\n"
334 ]
335 },
336 {
337 "cell_type": "markdown",
338 "metadata": {
339 "slideshow": {
340 "slide_type": "slide"
341 }
342 },
343 "source": [
344 "#### Lectura de datos del usuario\n",
345 "\n",
346 "Se pueden pedir datos al usuario desde la terminal usando la instrucción `input`.\n",
347 "\n",
348 "```python\n",
349 "answer = input(\"¿Cuál es la respuesta a la vida, el universo y todo lo demás?\")\n",
350 "```\n"
351 ]
352 },
353 {
354 "cell_type": "markdown",
355 "metadata": {
356 "slideshow": {
357 "slide_type": "slide"
358 }
359 },
360 "source": [
361 "#### Excepciones\n",
362 "\n",
363 "Los errores en Python se gestionan mediante el uso de excepciones. Hay diferentes tipos de excepciones por defecto, y se pueden crear otras personalizadas.\n",
364 "\n",
365 "Para capturar una excepción, se usa un bloque `try` / `except`.\n",
366 "\n",
367 "```python\n",
368 "try:\n",
369 " function_raises_exception()\n",
370 "except Exception:\n",
371 " handle_exception()\n",
372 "```\n"
373 ]
374 },
375 {
376 "cell_type": "code",
377 "execution_count": 3,
378 "metadata": {
379 "slideshow": {
380 "slide_type": "slide"
381 }
382 },
383 "outputs": [],
384 "source": [
385 "# Un easter egg\n",
386 "import antigravity"
387 ]
388 }
389 ],
390 "metadata": {
391 "celltoolbar": "Slideshow",
392 "kernelspec": {
393 "display_name": "Python 3",
394 "language": "python",
395 "name": "python3"
396 },
397 "language_info": {
398 "codemirror_mode": {
399 "name": "ipython",
400 "version": 3
401 },
402 "file_extension": ".py",
403 "mimetype": "text/x-python",
404 "name": "python",
405 "nbconvert_exporter": "python",
406 "pygments_lexer": "ipython3",
407 "version": "3.7.1"
408 }
409 },
410 "nbformat": 4,
411 "nbformat_minor": 2
412}