Python - introducción

En este capítulo, se introduce el lenguaje de programación Python.

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 2018 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 de máquinas, 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 la comunidad de programadores Stack Overflow. Esta última lo considera el lenguaje de programación de mayor crecimiento en los países de alto ingreso, como se muestra en la Fig. 7.

_images/growth_major_languages.png

Fig. 7 Crecimiento de los principales lenguajes de programación en los países de alto ingreso. Fuente: Stack Overflow.

En la actualidad, Python es ampliamente utilizado en enseñanza de la programación y es 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. 8.

_images/top-languajes-universities.png

Fig. 8 Lenguajes de programación utilizados en los departamentos de ciencias de la computación de las principales universidades de Estados Unidos. Fuente: Guo (2014).

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++.

Python fue creado por el programador holandés Guido van Rossum (véase la Fig. 9), 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) (véase la Fig. 10). La “cultura” de Python ocasionalmente hace referencia a Monty Python en tutoriales, ejemplos y otros materiales (ej. uso de spam, ham y eggs como variables metasintéticas en lugar de las tradicionales foo, bar y baz, en alusión al sketch Spam de Monty Python).

_images/Guido-portrait-2014.jpg

Fig. 9 Guido van Rossum, creador de Python. Fuente: Wikimedia Commons.

_images/montypython.jpg

Fig. 10 El circo volador de Monty Python. Fuente: Internet Movie Database (IMDB).

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:

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. 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, pythonistas o pythoneers.

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 170000 proyectos.

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”.

Aplicación en datos geoespaciales

Python ha tomado 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). 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. De manera similar, hay una gran cantidad de bibliotecas que ofrecen funciones geoespaciales que pueden ser utilizadas por cualquier otra herramienta. Entre estas, pueden mencionarse GDAL/OGR, para conversiones entre diferentes formatos vectoriales y raster; PROJ, para transformaciones entre sistemas de coordenadas y GeoPandas, para análisis geoespacial. Muchas de estas bibliotecas son distribuidas con licencias de software libre (free software).

En la Fig. 11, puede observarse como Python es ampliamente utilizado como lenguaje de scripting en SIG.

_images/python-gis-software.png

Fig. 11 Uso de Python en SIG. Fuente: Zambelli et al. (2013).

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. La versión 2 no recibirá más soporte a partir de 2020. La PSF proporciona una guía oficial para migrar programas de Python 2 a Python 3.

Por estos motivos, este curso se enfocará 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.

Herramientas para desarrollo en Python

Hay tres principales tipos de herramientas para elaborar programas en Python: editores de texto, ambientes integrados de desarrollo y notebooks.

Editores de texto

Son editores para cualquier tipo de archivo de texto. Aquí se presentan los que proveen algunas facilidades para la edición de código fuente (ej. colores para diferenciar palabras clave o tabulación automática). Son fáciles de utilizar, pero no aportan mayores facilidades para el proceso de desarrollo. Son apropiados para programas pequeños y de no muy alta complejidad. Algunos de los más populares son:

NOTA: no se deben editar programas con procesadores de texto como Microsoft Word o LibreOffice Writer, ya que pueden añadir caracteres especiales que no “entienden” los interpretadores ni los compiladores.

Ambientes integrados de desarrollo

Un ambiente integrado de desarrollo (Integrated Development Environment [IDE]), es una aplicación informática provee soporte integrado al proceso de programación. Típicamente, consiste de un editor de texto para el código fuente, herramientas para la construcción de archivos ejecutables y un depurador (debugger). Facilitan la elaboración de proyectos de mayor tamaño y complejidad. En el caso de Python, los IDE más populares son:

Notebooks

Son ambientes virtuales que combinan código fuente con texto, gráficos, videos y otros formatos. Se les considera muy apropiados para aprendizaje. El notebook más popular es el Jupyter Notebook, el cual proporciona una interfaz en ambiente web que permite la elaboración de documentos que permiten la ejecución interactiva de comandos en varios lenguajes (Python, R, Julia y Haskell, entre otros) y su documentación con el lenguaje de marcado Markdown.

Instalación del interpretador de Python

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 obtenerse instaladores para los diferentes sistemas operativos.

En este curso, se utilizará Anaconda, una distribución libre y de código abierto de Python y de otras herramientas utilizadas para ciencia de datos, como el lenguaje de programación R. Anaconda simplifica el manejo de paquetes, con sus diferentes versiones y dependencias, y está preconfigurada con más de 1500 paquetes preinstalados, lo que elimina la necesidad de aprender a instalar cada uno individualmente. Anaconda incorpora también el administrador de paquetes Conda. Como alternativa a Anaconda, puede utilizarse Miniconda, un instalador reducido de Anaconda.

Instalación de Anaconda/Miniconda

La página de descargas de Anaconda/Miniconda proporciona instaladores para las diferentes versiones de Python y de los sistemas operativos (Windows, macOS, Linux). Luego de descargarse la opción deseada, deben seguirse las instrucciones especificadas en la página de documentación de la instalación.

Google Colaboratory

Google Colaboratory (también llamado Colab) ofrece una alternativa de computación en la nube a la instalación local de Jupyter Notebooks. Colab ofrece un ambiente gratuito para ejecutar los notebooks y almacenarlos en Google Drive.

Ejecución de programas en Python

Los programas en Python pueden ejecutarse desde la línea de comandos del sistema operativo, en un IDE o en Jupyter Notebooks.

En Jupyter Notebooks

La interfaz de un Jupyter Notebook se muestra en la Fig. 12.

_images/jupyter-interface.png

Fig. 12 Interfaz de un nuevo Jupyter Notebook.

Un notebook consiste de una secuencia de celdas que pueden llenarse con código fuente o con texto en Markdown, como en el ejemplo de la Fig. 13.

_images/jupyter-holamundo.png

Fig. 13 Programa “Hola Mundo” en Jupyter Notebook.