2009-08-01

Algunas cosas buenas y malas de python (para mi)

Cosas buenas:

  • Duck-typing
  • Los espacios sirven para marcar bloques de código
  • Los bloques de código son elementos de primer orden del lenguaje
  • Soporte para un montón de cosas (por ejemplo pyCUDA)
  • Matches por nombre en expresiones regulares
Cosas malas:
  • Los objetos no son más que un mejunje de 2 diccionarios (el de la clase y el del objeto, sin orden)
  • Un montón de cosas están sacadas de los objetos, pero otras no. Esto lo deja inconsistente y molesto (teniendo que definir un montón de métodos mágicos de la forma __magic__)
  • Sin sintaxis buena para llamar al método de la clase padre (super, ¿dónde estás?)
  • "There is only one way to do it" salvo por las reglas para poner nombres de métodos ni clases. Por ejemplo, no queda claro si debe ser method_name, methodName o methodname (hay de los 3 en las biliotecas estándares)
  • No hay forma de definir bloques de código sin nombre (aunque con el agregado del with_statement, están bastante cerca del manejo de bloques de ruby). Los lambdas son una cosa que se queda muy corta.
  • Sintaxis especiales para demasiadas cosas (ejemplo: list comprehensions, for, while, decorators, etc)
  • Falta de separación entre strings y listas de bytes (¿Python 3000 lo arregla?, no sé)
  • Metaprogramar es complicado porque no hay bloques sin nombre y hay que definir/ llamar un montón de métodos __mágicos__.
  • Separación entre comandos y expresiones.
Happy hacking,
Aureliano.

6 comentarios:

Anónimo dijo...

Faltó hacerlo más tipo rant, para polemizar y generar más comentarios!

Gerard dijo...

Particularmente creo que le indentario obligatorio es una involucion en los lenguajes. En un punto me hace acordar al viejo cobol :S

aurelianito dijo...

Anónimo:
este es mi blog y escribo como se me da la gana.

aurelianito dijo...

Gerard:
La diferencia es que en Cobol (creo) las posiciones son fijas, mientras que en python lo que vale es la diferencia de posiciones. Eso hace que sea mucho más flexible. En particular podés tener, potencialmente, infinitos namespaces anidados. Creo que en Cobol eso no se puede.

Mario dijo...

Si que hay super(), que version de Python estas usando? El truco es que solo funciona para new-style classes (o sea las que derivan de object).

Igual no es que la herencia en Python sea una maravilla, ojo :)

Mario dijo...

Ah, y, si, en Python 3 esta arreglado el tema de los strings y las listas de bytes. Y hasta andan con ctypes y todo.