Por qué python mola

Después de escribir el artículo Por qué Java mola, no tengo más remedio que escribir el de por qué Python mola.

Antes de comenzar, debo advertiros que Python es mi lenguaje favorito. Y es como buscarle defectos a tu mejor amigo.

Actualización 2012-06-28: dándole la razón a Alejandro, definí incorrectamente el polimorfismo. Cambiado. Actualización 2012-07-10: gracias a @javisantana por añadir problemas de python: GIL, packaging y librería de red. Aprovecho para revisar también la variable self, que admitía ambigüedad.

Python

Python mola

Tipado dinámico

Contrariamente a lo que la gente dice, Python es fuertemente tipado. Lo que pasa es que tiene un tipado dinámico. Tú no puedes cambiar el tipo de una variable, pero puedes usar la misma variable para apuntar a… otra cosa.

Herencia dinámica

Además, sigue el principio de que “Si parece un pato y hace cosas de pato, entonces es un pato”. Esto simplifica la gestión de herencia, ya que no es necesario heredar de nada. Si tiene implementados los métodos que necesita, entonces cumple la interfaz. Así de simple.

Los objetos son ciudadanos de primera clase

Eso significa que cualquier objeto se puede pasar como parámetro a una función.

Todo es un objeto

Cualquier cosa: los tipos básicos, una función, una clase… Todo es un objeto. Si juntamos esto con la característica anterior, cualquier cosa se puede pasar siempre como parámetro de otra función. O puede guardarse en una variable, un vector, en una hash, …

Hashes y vectores son parte del lenguaje

Puedes instanciar una hash o un vector directamente, sin necesitar palabras reservadas o complejas estructuras de la API.

Api muy amplia

Python estándar tiene todo lo que puedes llegar a necesitar, desde gestores de la línea de órdenes a servidores web, pasando por gestión de hilos, gestión de archivos de configuración, lectura de XML, pársers de lenguajes, interfaces gráficas TK, … Lo que quieras.

Intérprete en línea

El intérprete en línea es una maravilla. Sobre todo si utilizas intérpretes con esteroides, tales como ipython o bpython .

Soporte nativo de ZIP

El soporte de ZIP es nativo. Basta con que metas algo en un zip, que cuando trates de ejecutarlo con python se lanzará el fichero __main__.py.

Estructurado

Al ser fuertemente indentado, la estructura de los documentos se queda perfectamente legible.

Esperado y homogéneo

Cuando eres nuevo en el lenguaje y aprendes la funcionalidad básica, cualquier cosa que quieras hacer sabes hacerla. Eso es porque es homogéneo, y todo se ejecuta de la manera más razonable.

A menudo sólo hay una manera correcta de hacer las cosas. Si las haces de otra manera, te estarás complicando la vida (hasta que te des cuenta).

Orientado a web

Desde su base. Y hay multitud de plataformas para desarrollar en web.

Properties

Olvídate de getters/setters. Eso no es pythónico. En python se utilizan variables públicas. Si más tarde decides cambiar su uso, basta cambiarlas por properties, pero su uso externo seguirá inalterado.

Público

Todo es público. Lo único que es privado es porque hay cierta nomenclatura, pero aún así, es accesible.

Pequeño

Cualquier cosa que quieras hacer es pequeña. Desde el propio compilador e intérprete, que ocupan unos 20 Mb. Todo resulta sencillo en Python.

Rápido

Rapidísimo. Tanto en su ejecución como en el desarrollo.

Python no mola

Global Interpreter Lock (GIL)

Es un mutex que evita que varios hilos nativos Python se ejecuten simultáneamente. Esto puede provocar terribles problemas de rendimiento y, además, provoca que no se aprovechen como deberían los recursos del sistema: los sistemas multiproceso están fuertemente limitados.

Librería de red

Python estándar tiene una librería de red compleja y poco pythónica en su API. Por suerte, tenemos la librería GEvent y la librería requests que solucionan este problema, aunque quedan fuera de la API estándar.

Sistema de paquetes

Pese a todas las bondades de Python, el sistema de paquetes es bastante deprimente: easy_install no es nada easy, y existen problemas para conseguir una versión delimitada de un paquete. Hay algunos problemas más , pero creo que es suficiente con lo dicho aquí.

Actualización: Ahora tenemos pip , que sí es bastante sencillo de utilizar y parece ser el sistema de gestión de paquetes estándar.

La maldita variable self

A menudo resulta odioso tener que pasar explícitamente la variable self como primer parámetro de los métodos. Sin embargo, esta funcionalidad permite realizar algunas operaciones que en otros lenguajes resultan más feas o, simplemente, no se pueden realizar.

¡Indentado!

Mucha gente dice que el hecho de ser fuertemente indentado es un problema. Yo tengo mis más y mis menos. En general me gusta, pero tengo que admitir que para ciertas cosas es un incordio.

No hay IDEs

Resulta muy complicado hacer un IDE de un lenguaje en el que los métodos de una clase pueden variar en tiempo de ejecución. Sin embargo, sí hay algunos bastante buenos. Apesar de ello, yo sigo utilizando mi Emacs.

Bueno para scripts, pero nada más

Eso es lo que defiende mucha gente, pero yo no lo creo. Creo que BitBucket está hecho en Python, y Google también lo utiliza.

Sobrecarga de métodos

Al no estar tipado, no es posible tener sobrecarga de métodos. Sin embargo, establece un sistema de valores por defecto de variables que ofrece una versatilidad similar a la del tipado.

Fin

Hay muchas razones para usar Python y muy pocas para no hacerlo. ¡Es de bonito!