|
| 1 | +# Tutorial Python. |
| 2 | + |
| 3 | +*Tutorial Python* una guía de referencias para la instalación e introducción rápida al lenguaje [*Python*](https://www.python.org/). |
| 4 | + |
| 5 | + |
| 6 | +<img src="https://img.shields.io/badge/License-MIT-green" /> <img src="https://img.shields.io/badge/Markdown-1.0.1%20-blue" /> |
| 7 | + |
| 8 | +## Desarrolladores. |
| 9 | + |
| 10 | +* [Ing. Edgard Decena.](mailto:edecena@gmail.com) |
| 11 | +* [Ing. Luís Acevedo.](mailto:laar19@protonmail.com) |
| 12 | + |
| 13 | +<a name = "indice"></a> |
| 14 | + |
| 15 | +## Índice. |
| 16 | +<pre> |
| 17 | +1. <a href = "#que">¿Qué es GIT?</a> |
| 18 | +2. <a href = "#instalacion">Instalación y configuración.</a> |
| 19 | + 2.1 <a href = "#estableciendo">Estableciendo la identidad del usuario.</a> |
| 20 | + 2.2 <a href = "#obteniendo">Obteniendo ayuda.</a> |
| 21 | +</pre> |
| 22 | + |
| 23 | +Históricamente la ciencia se ha dividido en **disciplinas experimentales** y **disciplinas teóricas** (o *empirismo* y *racionalismo*). Consecuentemente, un gran número de estudios en filosofía de la ciencia (*epistemología*) se han dedicado al estudio de la interelación de estos dos modos de hacer ciencia. Durante las últimas décadas la **computación** ha emergido como un componente importante del quehacer científico, y al hacerlo ha desestabilizado esta visión binaria de la ciencia. Dicho de una forma simple, es posible ahora usar las computadoras para resolver problemas científicos de forma más rápida y menos engorrosa; **pero sobre todo resolver problemas que antes no podían ser resueltos analíticamente**. |
| 24 | + |
| 25 | +<a name = "que"></a> |
| 26 | + |
| 27 | +## Instalación de Python. |
| 28 | +*** |
| 29 | +Según el sistema operativo, *Python* puede ser instalado de 3 maneras: |
| 30 | +* **Windows**: puede ser descargado directamente desde la [página principal](https://www.python.org/downloads/windows/) de *Python*. |
| 31 | +* **Mac OS X**: Aunque la mayoría de las versiones de *MacOsX* vienen con *Python* pre instalado, puede en algunos casos instalarse desde la [página principal](https://www.python.org/downloads/mac-osx/) de *Python*. |
| 32 | +* **Linux**: Todas las versiones de Linux vienen instaladas con *Python*. podrás ver la versión que tienes instalada abriendo la terminal y escribiendo `python`. |
| 33 | + |
| 34 | +## Modos de uso. |
| 35 | +*** |
| 36 | +En *Python*, se suele usar el código de 3 modos relacionados: |
| 37 | +* **Interactivo**: Esto es común en tareas exploratorias, cuando aún no tenemos del todo definido el problema. Por ejemplo, tenemos un conjunto de datos en uno o más archivos y necesitamos saber qué información contienen, quizás hacer algún gráfico o buscar palabras claves. Los modos interactivos de *Python* pueden habilitarse al usarlo directamente en la terminal a través del intérprete del lenguaje, mediante *Jupyter Notebooks*, compiladores online, etc. |
| 38 | + |
| 39 | + |
| 40 | +* **Scripts**: Los scripts (del inglés guión) se refiere a pequeños programas que se usan para tareas sencillas, generalmente cuando queremos automatizar tareas como hacer una copia de respaldo (backup) semanal, o descargar alguna información de una página web cada vez que esta actualice cierta información. A veces también estos scripts se usan como "pegamento" para concatenar programas, generalmente cuando estos programas son complejos o no tenemos acceso al código fuente (o no entendemos el código fuente). |
| 41 | + |
| 42 | +* **Paquetes o librerías**: Esto es más o menos lo que uno tiene en mente cuando piensa en un programa, como una hoja de cálculo, o una aplicación de para el celular. Es decir, son varios bloques de códigos organizados para realizar diversas tareas. En general, un usuario de *Python* NO escribe librerías, sino que hace uso de ellas. Escribir librerías requiere de ciertos principios de ingeniería de software, de lo contrario el código tendrá altas probabilidades de ser ineficiente, difícil de mantener, propenso a errores, etc. |
| 43 | + |
| 44 | +En este repositorio nos centraremos en los dos primeros modos, *Interactivo* y *Scripts*, y sólo usaremos librerías de terceros sin conocer cómo escribirlas nosotros mismos, ya que eso es tarea de los desarrolladores y no de los usuarios. El modo *Interactivo* lo explicamos en el notebook [02_jupyter_notebook.ipynb](01_jupyter_notebook.ipynb). |
| 45 | + |
| 46 | +## Características fundamentales. |
| 47 | +*** |
| 48 | +El lenguaje [*Python*](https:///www.python.org) es: |
| 49 | +* Un lenguaje de programación **orientado a objetos**. |
| 50 | +* De **propósito general**, es suficientemente bueno para casi todo. |
| 51 | +* **Multiparadigma**, es posible programar usando distintos estilos de programación o incluso combinándolos. |
| 52 | +* De **alto nivel**, es decir cercano al lenguaje humano y lejos del lenguaje máquina. |
| 53 | +* **Interpretado**, es decir no es necesario compilarlo antes de correr un script Python. |
| 54 | +* **Multiplataforma**, corre en diversos sistemas operativos. |
| 55 | +* Un lenguaje **simple**, el código es simple de leer, de escribir y de mantener. |
| 56 | +* **Gratuito** y es una herramienta de **código abierto**. |
| 57 | +* Está muy **bien documentado**. |
| 58 | +* Es ampliamente usado en la mayoría de las disciplinas científicas. |
| 59 | +* Tiene una gran comunidad de usuarios (no todos científicos), por lo que es fácil encontrar ayuda, tutoriales, foros, blogs, etc. |
| 60 | +* Buena performance. Aunque estrictamente es un lenguaje lento (el costo de la simplicidad). Existen formas de acelerarlo. |
| 61 | +* Posee un extenso ecosistema de librerías: |
| 62 | + |
| 63 | +[](https://www.youtube.com/watch?v=5GlNDD7qbP4) |
| 64 | + |
| 65 | +## Libros de aprendizaje. |
| 66 | +*** |
| 67 | +*Python* es un lenguaje con una curva de aprendizaje interesante. Muchos autores han decidido volcar sus conocimientos para apoyar a los aprendices en la construcción de programas y conocimiento estructurado. Hay libros especializados en temas puntuales o en tópicos importantes; como por ejemplo el desarrollo web o el análisis de datos. |
| 68 | + |
| 69 | +La correcta elección de un libro implica muchos factores, pero es bastante útil de primera mano buscar referencias que nos puedan dar un panorama más claro del autor o título, para así tener la seguridad antes de leer un libro sobre *Python*. |
| 70 | + |
| 71 | +Aquí te presentamos los principales libros sobre el lenguaje, los más destacados a elección de los profesionales del sector. |
| 72 | + |
| 73 | +### Python Crash Course. |
| 74 | +[Python Crash Course](https://www.amazon.com/Python-Crash-Course-Hands-Project-Based/dp/1593276036) es un curso sorprendente, orientado a personas que quieren aprender a programar por cuenta propia. Es una introducción amena a la programación y particularmente, como es lógico, al lenguaje *Python*. A través del libro se tienen distintos desafíos entre los cuales destaca el escribir programas, resolver problemas y consolidar los conceptos básicos previos a código de mayor nivel. |
| 75 | + |
| 76 | +El libro enseña conceptos bastante populares en la actualidad, como el uso de librerías, la respuesta a eventos de mouse y teclado, visualización de datos e incluso creación de juegos en 2D. |
| 77 | + |
| 78 | +### Learning Python. |
| 79 | + |
| 80 | +[Learning Python](https://www.amazon.com/Learning-Python-5th-Mark-Lutz/dp/1449355730/ref=pd_lpo_sbs_14_t_2?_encoding=UTF8&psc=1&refRID=JN73FSJC7091MKHXNN8Y) es uno de los libros más populares, dado que es el resumen del curso de entrenamiento en *Python* de su autor, Mark Lutz. Es un libro que mejora constantemente, presentando una quinta edición bastante robusta que introduce conceptos y buenas prácticas. |
| 81 | + |
| 82 | +Tiene muchas bondades, entre ellas desafíos que permiten escribir código de forma rápida, eficiente y de alta calidad. Está indicado para personas con pocos conocimientos, aunque obviamente es útil también para programadores con mayor experiencia. |
| 83 | + |
| 84 | +De primera mano permite explorar los tipos de objeto por defecto que vienen con el lenguaje, como la sintaxis elemental. Una de sus principales características es que todos los conocimientos están orientados en la programación orientada a objetos. |
| 85 | + |
| 86 | +### Fluent Python. |
| 87 | + |
| 88 | +[Fluent Python](https://www.amazon.com/Fluent-Python-Concise-Effective-Programming/dp/1491946008/ref=sr_1_1?ie=UTF8&qid=1499089735&sr=8-1&keywords=Fluent+Python%3A+Clear%2C+Concise%2C+and+Effective+Programming) es un libro distinto, está diseñado para volverse productivo en el desarrollo con *Python* de forma rápida, dado que es un libro “hands-on” que básicamente prioriza las actividades a la teoría. |
| 89 | + |
| 90 | +Este libro se concentra en aspectos importantes como modelos y estructuras de datos, funciones y flujos de control. Además tiene una sección muy interesante relacionada a la metaprogramación, un concepto más avanzado pero inherente a grandes proyectos. |
| 91 | + |
| 92 | +### Learn Python: the hard way. |
| 93 | + |
| 94 | +[Learn Python: the hard way](https://learnpythonthehardway.org/book/) es un libro que por el título puede pensarse está orientado a programadores experimentados o que buscan un desafío en su aprendizaje. Sin embargo, es un libro eminentemente para principiantes, de una elevada calidad. El término “Hard way” se refiere al deseo del autor de afianzar algunos conceptos como base para avanzar en el libro. |
| 95 | + |
| 96 | +El libro tiene niveles iniciales con temas elementales (como el primer Hola mundo o la construcción de variables) pero poco a poco ahonda y permite tener una visión sólida del lenguaje *Python* de cara a la programación orientada a objetos. |
| 97 | + |
| 98 | +### Python Cookbook. |
| 99 | + |
| 100 | +[Python Cookbook](https://www.amazon.com/Python-Cookbook-Third-David-Beazley/dp/1449340377/ref=sr_1_4?s=books&ie=UTF8&qid=1520398239&sr=1-4&keywords=python+cookbook) es uno de los libros más amenos para el aprendizaje de *Python*. Se puede encontrar las indicaciones para el desarrollo de programas a manera de recetas. Hay una serie de temas interesantes para desarrolladores experimentados y novatos que se pueden explorar. Entre ellos están los algoritmos y estructuras de datos, las cadenas de texto y números, los tipos de operadores, las clases y objetos, la programación web y los principales errores en el desarrollo de un programa. |
| 101 | + |
| 102 | +### Python para todos. (online) |
| 103 | + |
| 104 | +[Python para todos](documentos/libro_python_para_todos.pdf) se trata de un libro gratuito, que empieza tratando sobre conceptos básicos pero ahonda hasta el uso de bases de datos. Está distribuido bajo una licencia de *Creative Commons* y se puede realizar su descarga en formato PDF directamente desde su misma página web. |
| 105 | + |
| 106 | +Estos fueron algunos títulos únicamente del gran universo bibliográfico que gira en torno a *Python*. Como hemos podido ver, la mayoría de ellos están escritos en inglés, pero inclusive si no tienes el idioma a la perfección muchos de los conceptos son entendibles. |
| 107 | + |
| 108 | +Siéntete en la libertad de usar libros para aprender *Python* cuando desees, porque si bien es cierto que para programar se necesita escribir código a diario, un libro puede ser el aliado perfecto al momento de diagnosticar un error o resolver un bug. |
| 109 | + |
| 110 | +## Trucos y consejos. |
| 111 | +*** |
| 112 | +### 1.- Crear un entorno virtual Python. |
| 113 | +Cuando se está desarrollando software en *Python*, es común utilizar diferentes versiones de un mismo paquete. Un *virtualenv*, o entorno virtual de *Python*, es un ambiente creado con el objetivo de aislar recursos como librerías y entornos de ejecución del sistema principal o de otros entornos virtuales. Esto significa que en el mismo sistema, computadora, es posible tener instaladas múltiples versiones de una misma librería sin crear ningún tipo de conflicto. |
| 114 | + |
| 115 | +Para crear y utilizar un entorno virtual debe instalarse `virtualenv`; pero antes debe instalarse el manejador de paquetes de *Python* `pip`: |
| 116 | + |
| 117 | +```bash |
| 118 | +sudo apt-get install python3-pip |
| 119 | +``` |
| 120 | +Luego instalamos `virtualenv`: |
| 121 | +```bash |
| 122 | +sudo pip3 install virtualenv |
| 123 | +``` |
| 124 | +#### Creando un entorno virtual. |
| 125 | +Para crear el entorno virtual debes dirigirte a la carpeta donde lo deseas crear. Se crea con el comando `virtualenv` seguido del nombre que le quieras poner, como lo indica el siguiente ejemplo: |
| 126 | +```bash |
| 127 | +virtualenv nombre_de_tu_entorno -p python3 |
| 128 | +``` |
| 129 | +Esto creará una nueva carpeta dentro del directorio que hayamos escogido, allí se instalarán todos los paquetes que desees utilizar. |
| 130 | + |
| 131 | +#### Activar / Desactivar entorno virtual. |
| 132 | +Para **activar** el entorno virtual debes dirigirte a la nueva carpeta anteriormente creada y ejecuta: |
| 133 | +```bash |
| 134 | +source nombre_entorno_virtual/bin/activate |
| 135 | +``` |
| 136 | +Para **desactivar** el entorno virtual simplemente ejecuta: |
| 137 | +```bash |
| 138 | +deactivate |
| 139 | +``` |
| 140 | + |
| 141 | +### 2.- Estructura de un script en Python. |
| 142 | + |
| 143 | +```python |
| 144 | +1 #!/usr/bin/env python3 |
| 145 | +2 ... |
| 146 | +3 ... |
| 147 | +4 if __name__ == "__main__": |
| 148 | +5 pass |
| 149 | +6``` |
| 150 | + |
| 151 | +La **línea 1** se conoce como *shebang*, se reconoce al iniciar con los caracteres `#!` cuando están al principio de la primera o segunda línea de un archivo de texto. Indica que el archivo es un *script* y le dice al sistema operativo qué intérprete ha de usarse para ejecutarlo. Los sistemas operativos *Linux* (y otros sistemas *Unix-like*) soportan de forma nativa esta característica. |
| 152 | + |
| 153 | +Entre los ejemplos de *shebang* tenemos: |
| 154 | + |
| 155 | +* `#!/usr/bin/python3` -> Usar el ejecutable *Python* localizado en `/usr/bin` |
| 156 | +* `#!/usr/bin/env python3` -> Usa `env` para buscar la variable de entorno "python3" en el PATH para ejecutar el script con ese programa. |
| 157 | + |
| 158 | +Los sistemas operativos *Windows* no tienen soporte nativo para *shebang*. En cambio, usan la *extensión* del archivo para asociarlo al ejecutable de turno. Por lo tanto, la línea de *shebang* sería completamente ignorada en el caso de los sistemas Windows. |
| 159 | + |
| 160 | +La **línea 4** está asociada al modo de funcionamiento del intérprete *Python*. Cuando el intérprete lee un archivo de código, **ejecuta todo el código que se encuentra en él**. Todo módulo (archivo de código) en *Python* tiene un atributo especial llamado `__name__` que define el *espacio de nombres* en el que se está ejecutando el archivo. Este atributo es usado para identificar de forma única un módulo en el sistema de importaciones. |
| 161 | + |
| 162 | +Por su parte `__main__` es el nombre del *ámbito* en el que se ejecuta el código de nivel superior (tu programa principal). |
| 163 | + |
| 164 | +El intérprete pasa el valor del atributo a `"__main__"` si el módulo se está ejecutando como programa principal (cuando lo ejecutas llamando al intérptrete en la terminal con `python my_modulo.py`, haciendo doble click en él, ejecutandolo en el intérprete interactivo, etc ). |
| 165 | + |
| 166 | +Si el módulo NO es llamado como programa principal, sino que es **importado** desde otro módulo, el atributo `__name__` pasa a contener el **nombre del archivo** en sí. |
| 167 | + |
| 168 | +Es decir, si tienes un archivo llamado `mi_modulo.py`, si lo ejecutamos como programa principal el atributo `__name__` será `"__main__"`, si lo usamos importándolo desde otro módulo (`import mi_modulo`) el atributo `__name__` será igual a `"mi_modulo"`. |
| 169 | + |
| 170 | +En resúmen, básicamente lo que haces usando `if __name__ == "__main__":` es ver si el módulo ha sido importado o no. Si no se ha importado (se ha ejecutado como programa principal) ejecuta el código dentro del condicional. |
| 171 | + |
| 172 | +Una de las razones para hacerlo es que, a veces, se escribe un módulo (un archivo .py) que se puede ejecutar directamente, pero que alternativamente, también se puede importar y reutilizar sus funciones, clases, métodos, etc. en otro módulo. Con esto conseguimos que la ejecución sea diferente al ejecutar el módulo directamente que al importarlo desde otro programa. |
| 173 | + |
| 174 | +### 3. Guía de estilo PEP8. |
| 175 | + |
| 176 | +En la organización *Python* existen lo que se llaman *PEP's* o [*Python Enhancement Proposals*](http://www.python.org/dev/peps/pep-0001/#what-is-a-pep), los cuales son documentos que proveen información a la comunidad de *Python* o describen nuevas características del lenguaje, su proceso de desarrollo o su entorno. Uno de estos *PEP's* es el *PEP8*, el cual está dedicado a la recopilación de los estándares de estilo seguidos por los desarrolladores de *Python* a la hora de escribir código para la librería estandar. Un listado completo de los *PEP's* se puede encontrar [aquí](http://www.peps.io/), mientras que una versión en castellano del *PEP8* se puede descargar de [aquí](documentos/guia_pep8_es.pdf) en este repositorio. |
0 commit comments