Autor: | Alberto Bertogli (albertito@gmail.com) |
---|---|
Fecha: | Sábado 7/Octubre/2006 |
Mostrar los elementos avanzados del lenguaje.
Concentrarnos principalmente en su uso, no en sus mañas.
Ver las cosas locas que se pueden hacer, y la magia que hay detrás.
Mucha imaginación.
Por si no lo vieron a la mañana.
Todos los métodos mágicos se nombran de la forma __metodo__.
Nos permiten proveer sintaxis amistosa y legible para nuestros objetos.
Podemos abusarnos de la sintaxis clara.
Tener cuidado de no dar sorpresas.
Símil a expresar conjuntos por comprensión
Ejemplos:
[ x + 1 for x in l ] [ (x, y) for x in l1 for y in l2 ] [ f(x) for x in l] == map(f, l) [ x for x in l if f(x) ] == filter(f, l) [ f(x, y) for x in l1 for y in l2 if p1(x) and p2(x) ]
Ejemplos simples:
dir(thread) => [... 'stack_size', 'start_new', 'start_new_thread' ... ] isinstance(1, int) => True f.func_code.co_argcount => Cant. de args de f
Gran parte de la sintaxis normal termina en la invocación de métodos especiales.
Son como los operadores, solo que reflejan la sintaxis.
No es tan engorroso como parece, y solo lo usamos para cosas locas.
Un decorator es una función normal.
Toma una función como parámetro, devuelve una función.
Se usa así:
def f(x): return x + 1 f = decorate(f)
Horrible, demasiado explicito, poco practico, difícil de leer.
Sintaxis linda para lo anterior:
@decorate def f(x): return x + 1
Podemos apilarlos y pasarle parámetros (ojo con la evaluación):
@debug @dtag('minor') def f(...): ...
¿Pero de que nos sirven?
Son muy útiles.
Nos permiten todo tipo de triquiñuelas con una sintaxis agradable, combinando las otras cosas que vimos.
Nuevo en Python 2.5
Permite cosas como:
with db.transaction() as trans: ...
Llama a __enter__() al entrar y a __exit__() al salir
Útil para transacciones, locks, y bloques donde se quiera efectuar un conjunto de acciones con algún objeto que deba ser notificado.
No vamos a llegar con tiempo para esto.
El 99% de los programadores de Python no lo usa nunca (de forma consciente).
Son las clases de las clases. Sirven para tener control acerca de como se crea una clase, y manipularla.
¡Fin!
¿Que sigue? ¡La noche de los museos!