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 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!