Introducción a Python#
Trabajo previo#
Lecturas#
Severance, D. C. R. (2016). Chapter 1: Why should you learn to write programs? y Chapter 2: Variables, expressions, and statements en Python for Everybody: Exploring Data in Python 3 (S. Blumenberg & E. Hauser, Eds.). CreateSpace Independent Publishing Platform. https://www.py4e.com/html3/
Introducción#
Python es un lenguaje de programación de propósito general ampliamente utilizado en áreas como desarrollo web, aprendizaje automático e inteligencia artificial, entre otras. Fue creado por Guido van Rossum a finales de la década de 1980.
Python es un lenguaje interpretado, multiplataforma, con un sistema de tipos de datos dinámico, administración automática de memoria y con soporte para varios paradigmas de programación, incluyendo programación orientada a objetos, programación funcional, programación imperativa y programación procedimental.
La comunidad de programadores de Python ha establecido varios principios de diseño de programas y un conjunto de mejores prácticas. Un programa se considera “pitónico” si sigue estos principios y prácticas.
Python es también muy popular en el área de procesamiento de datos geoespaciales, en dónde se emplea como lenguaje de desarrollo de aplicaciones y como lenguaje de scripting en sistemas de información geográfica, sistemas administradores de bases de datos y servidores web de mapas.
El lenguaje de programación Python#
Python es un lenguaje de programación de propósito general que ha alcanzado una gran popularidad en los últimos años. Fue declarado el lenguaje del año en 2020 y 2021 por el índice Tiobe de popularidad de lenguajes de programación, debido al crecimiento de su uso en diversas áreas, entre las que destacan la ciencia de datos y el aprendizaje automático, además de otras como desarrollo web, scripting y visualización de datos, entre muchas. Esta popularidad es respaldada por otras fuentes como el índice PYPL y el sitio de preguntas y respuestas para programadores Stack Overflow. Este último lo consideró, en 2017, el lenguaje de programación de mayor crecimiento en los países de alto ingreso, como se muestra en la Fig. 18.

Fig. 18 Crecimiento de los principales lenguajes de programación en los países de alto ingreso. Imagen de [Rob17].#
Python también es ampliamente utilizado en enseñanza de la programación. En 2014, era el lenguaje más empleado en cursos introductorios de programación de las principales universidades de Estados Unidos, como puede apreciarse en el gráfico de la Fig. 19.

Fig. 19 Lenguajes de programación utilizados en los departamentos de ciencias de la computación de las principales universidades de Estados Unidos. Imagen de [Guo14].#
Este uso en enseñanza se debe, entre otras razones, a que los programas en Python son más fáciles de leer y requieren menos líneas de código fuente que otros lenguajes de amplia difusión, tales como Java, C o C++.
Historia#
Python fue creado por el programador holandés Guido van Rossum, quién concibió el diseño original del lenguaje a finales de la década de 1980 y dio a conocer la primera versión en 1991.
El nombre del lenguaje es un homenaje al grupo de comedia británico Monty Python. Según van Rossum, en diciembre de 1989 buscaba un proyecto de programación como “pasatiempo” durante los días cercanos a la navidad, por lo que decidió escribir un interpretador para un lenguaje de programación en el que había estado pensando recientemente. Escogió el nombre Python por encontrarse en un “humor ligeramente irreverente” y ser un gran aficionado al programa de televisión “El circo volador de Monty Python” (Monty Python’s Flying Circus) (Fig. 20).

Fig. 20 El circo volador de Monty Python. Fuente: Internet Movie Database (IMDB).#
La “cultura” de Python ocasionalmente hace referencia a Monty Python en tutoriales, ejemplos y otros materiales. Por ejemplo, en el uso de spam, ham y eggs como variables metasintéticas en sustitución de las tradicionales foo, bar y baz, en alusión al sketch Spam (video del sketch).
Principales características del lenguaje#
La filosofía de diseño de Python enfatiza la importancia de que los programas sean fáciles de leer, de manera que los programadores puedan entender rápidamente su propósito, control de flujo y funcionamiento. Esto facilita el mantenimiento de los programas existentes y disminuye la necesidad de crear otros nuevos.
Las siguientes son otras características importantes del lenguaje Python:
Es interpretado: las instrucciones se traducen una por una a lenguaje de máquina, a diferencia de los lenguajes compilados, que traducen de manera conjunta las instrucciones de una unidad completa (ej. un programa o una biblioteca). Los lenguajes interpretados tienden a ser más lentos que los compilados, pero también son más flexibles como entornos de desarrollo y depuración.
Tiene un sistema de tipos de datos dinámico: las variables pueden tomar diferentes tipos de datos (ej. textuales, numéricos) durante la ejecución del programa, a diferencia de un sistema de tipos de datos estático, en el que las variables solo pueden tener un tipo de datos durante la ejecución del programa. La mayoría de los lenguajes de tipos dinámicos son también lenguajes interpretados.
Cuenta con administración automática de memoria: el interpretador se encarga de asignar y administrar la memoria de las variables, sin intervención del programador. Esto incluye un sistema de recolección de basura, que libera la memoria de las variables que no están siendo utilizadas.
Soporta varios paradigmas de programación: los paradigmas son estilos o enfoques teóricos de programación. En el caso de Python, incluye programación orientada a objetos, programación imperativa, programación funcional y programación procedimental.
Es multiplataforma: puede ejecutarse en los sistemas operativos más populares (ej. Windows, macOS, Linux).
Principios de diseño#
El Zen de Python#
La filosofía de diseño de Python está resumida en una lista de 19 principios conocida como el Zen de Python que guían el uso del lenguaje.
Guía de estilo para código Python#
Los principios de diseño se reflejan en la guía de estilo para código Python, la cual proporciona una serie de convenciones para la escritura de programas.
Programas “pitónicos”#
La aplicación de estos principios y el seguimiento de mejores prácticas y de idioms de programación, como los descritos en The Hitchhiker’s Guide to Python!, hacen que un programa se considere “pitónico” (pythonic). Los programadores que siguen la filosofía de Python son llamados pythonists, pythoneers o pythonistas.
Licenciamiento#
Python Software Foundation (PSF) es la organización sin fines de lucro que posee los derechos de propiedad intelectual del lenguaje Python y que maneja las licencias de software libre con las que se distribuye. Su misión es “promover, proteger y avanzar el lenguaje de programación Python, así como apoyar y facilitar el crecimiento de una comunidad diversa e internacional de programadores de Python”.
La implementación de referencia del interpretador de Python, llamada CPython, es software de código abierto (open source), lo que facilita que el desarrollo de Python sea conducido por una comunidad de programadores enlazada a través de Internet. Este modelo es seguido por la mayoría de las implementaciones del interpretador de Python. Una muestra muy representativa de este esquema de colaboración es el Python Package Index (PyPI), un repositorio para compartir componentes de software programados con Python, que a la fecha alberga más de medio millón de proyectos.
Python 2 y Python 3#
La versión 3 de Python fue liberada en 2008 y tiene diferencias en su sintaxis que la hacen incompatible con la versión 2. Desde entonces, se recomienda la migración de los programas en Python 2 a Python 3 y el uso de Python 3 para el desarrollo de nuevas aplicaciones. Ya no se brinda soporte oficial para Python 2. La PSF proporciona una guía oficial para migrar programas de Python 2 a Python 3.
Este curso se enfoca en Python 3. Cabe destacar que las diferencias de importancia entre ambas versiones son realmente pocas y un programador experimentado en el uso de Python 3 puede entender facilidad un programa en Python 2 y viceversa.
Aplicación en datos geoespaciales#
Python ha ganado una gran importancia en el área del desarrollo de aplicaciones geoespaciales debido a su popularidad, “suavidad” de la curva de aprendizaje y abundancia de recursos de educación y consulta (ej. tutoriales, libros, listas de correo, foros de discusión). Todas estas son características que, entre otras, lo hacen muy apropiado para programadores que no son especialistas en ciencias de la computación, como es el caso de muchos de los usuarios de sistemas de información geográfica (SIG) y otros tipos de software geoespacial. De hecho, muchas de estas herramientas han seleccionado a Python como el lenguaje de preferencia para que sus usuarios amplíen o configuren la funcionalidad que ofrecen. Como ejemplos, pueden mencionarse las bibliotecas ArcPy para ArcGIS, PyQGIS para QGIS y PyGRASS para GRASS GIS.
En la Fig. 21, puede observarse como Python es ampliamente utilizado como lenguaje de scripting en software para manejo de datos geoespaciales.

Fig. 21 Uso de Python en software para manejo de datos geoespaciales. Imagen de [ZGC13].#
Herramientas para desarrollo#
Hay una gran cantidad de herramientas disponibles para desarrollar programas en Python, incluyendo editores de código fuente, ambientes de desarrollo integrados y cuadernos de notas (notebooks). Entre las más usadas pueden mencionarse:
Visual Studio Code#
Visual Studio Code (VS Code) es un editor de código fuente ligero y multiplataforma desarrollado por Microsoft como software libre. Es ampliamente utilizado debido a su flexibilidad, extensibilidad y rendimiento. Soporta una amplia gama de lenguajes de programación, incluyendo Python, JavaScript, C y C++, entre otros, y ofrece características como autocompletado de código, depuración integrada y control de versiones, usualmente disponibles en herramientas de desarrollo más complejas, como los ambientes de desarrollo integrados (IDE, Integrated Development Environment).
Una de las mayores fortalezas de VS Code es su ecosistema de extensiones, que permite a los usuarios personalizar y expandir sus capacidades según las necesidades de cada proyecto.
VS Code también permite el desarrollo de cuadernos de notas, como los que se describen en la siguiente sección.
Jupyter Notebook y Jupyter Lab#
Jupyter Notebook es una aplicación web de código abierto que permite crear y compartir documentos llamados cuadernos de notas o notebooks que combinan código fuente en Python (y otros lenguajes de programación) con texto narrativo en Markdown y visualizaciones como gráficos estadísticos y mapas. Es especialmente popular en el ámbito de la ciencia de datos, el análisis de datos y la investigación académica.
JupyterLab es la siguiente generación de la interfaz de usuario de Jupyter Notebook y proporciona un entorno de desarrollo más flexible y poderoso. Extiende las capacidades de los Jupyter Notebooks al permitir la carga de múltiples documentos y vistas en diferentes paneles JupyterLab también ofrece un mejor soporte para extensiones y herramientas interactivas.
La interfaz de un Jupyter Notebook se muestra en la Fig. 22.

Fig. 22 Programa “Hola Mundo” en un Jupyter Notebook.#
Instalación#
El interpretador de Pyhon puede obtenerse de varias formas. Una de la más usuales es en la página de descargas de Python.org, en donde pueden encontrarse instaladores para los diferentes sistemas operativos. Sin embargo, existen otras opciones como la que se describe en la siguiente sección.
Con Miniconda/Anaconda#
En este curso, se utilizará Miniconda, una distribución libre y de código abierto de Python y de otras herramientas utilizadas en ciencia de datos. Contiene un instalador mínimo para el sistema de gestión de paquetes y entornos virtuales conda. Es una versión reducida de una distribuión más amplia llamada Anaconda. La instalación inicial de Miniconda incluye solamente conda, el interpretador de Python y unos pocos paquetes adicionales.
El administrador de paquetes conda permite el manejo de entornos virtuales (environments), los cuales son ambientes aislados que permiten a los usuarios y desarrolladores manejar sin conflictos diferentes versiones de paquetes, bibliotecas y dependencias para proyectos específicos.
Ambientes de ejecución en la nube#
Hay varias plataformas que ofrecen la posibilidad de ejecutar notebooks en la nube, como una alternativa a la ejecución en una computadora personal.
Google Colaboratory#
Google Colaboratory (también llamado Colab) ofrece un ambiente gratuito para ejecutar los notebooks y almacenarlos en Google Drive.
Otros#
Existen otros ambientes de ejecución en la nube, como Binder y Kaggle.
Ejercicios#
Instalación de software#
Desarrollo y ejecución de programas en Python#
Escriba un programa en Python llamado
imc.py
para calcular el índice de masa corporal (IMC) de una persona (puede usar uno de los ejemplos vistos en el curso) y ejecútelo desde la línea de comandos de Miniconda y desde VS Code. Pruebe las herramientas de depuración de programas (debugging) de VS Code.Escriba un cuaderno de notas para el cálculo del IMC. Agregue encabezados para el título y para secciones de entrada, procesamiento y salida. Distribuya el código fuente en esas secciones. Ejecute el cuaderno de notas en:
a. Jupyter Notebook.
b. Jupyter Lab.
c. VS Code.
Referencias bibliográficas#
Philip Guo. Python Is Now the Most Popular Introductory Teaching Language at Top U.S. Universities. July 2014. URL: https://cacm.acm.org/blogs/blog-cacm/176450-python-is-now-the-most-popular-introductory-teaching-language-at-top-us-universities/fulltext (visited on 2022-01-20).
David Robinson. The Incredible Growth of Python. September 2017. URL: https://stackoverflow.blog/2017/09/06/incredible-growth-python/ (visited on 2022-01-20).
Pietro Zambelli, Sören Gebbert, and Marco Ciolli. Pygrass: An Object Oriented Python Application Programming Interface (API) for Geographic Resources Analysis Support System (GRASS) Geographic Information System (GIS). ISPRS International Journal of Geo-Information, 2(1):201–219, March 2013. Number: 1 Publisher: Multidisciplinary Digital Publishing Institute. URL: https://www.mdpi.com/2220-9964/2/1/201 (visited on 2022-01-20), doi:10.3390/ijgi2010201.