10.07.2015 Views

A4 apaisado, 2 columnas - PET: Python Entre Todos - Python ...

A4 apaisado, 2 columnas - PET: Python Entre Todos - Python ...

A4 apaisado, 2 columnas - PET: Python Entre Todos - Python ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Preparación 24logging.debug("; ".join(message))return wrapEl café es solo para mantenerse despierto mientras se codea y el azúcar podría usarse conel café, lo cuál no es totalmente obligatorio porque todos sabemos que el azúcar puedecomerse sólo, a cucharadas.PreparaciónUna vez que contamos con nuestro callable y nuestro decorador, procedemos a mezclarlosen un bol.En <strong>Python</strong> tenemos 2 formas de mezclarlos, que son totalmente válidas.La primera, bien dulce, con azúcar sintáctico:@log_callabledef yes(string='y', end='\n'):[...]La segunda 2 , sólo para diabéticos:yes = log_callable(yes)Voilá, tenemos nuestro callable envuelto (decorado).A continuación hablaremos un poco de la anatomía básica de un decorador para quenuestro verdulero amigo no nos estafe al momento de elegirlo.Cómo se ve un decoradorTanto una clase como una función pueden ser un decorador. A su vez estos decoradorespueden o no recibir argumentos (aparte de los argumentos con los que se llama elcallable).Por lo que tendremos 2 grandes grupos:1. Funciones decoradorasa. Sin argumentos.b. Con argumentos.2. Clases decoradorasa. Sin argumentos.b. Con argumentos.La llamada del callable en un decorador debe ser explícita, un decorador podría porejemplo hacer que no se ejecute la función decorada.Ejemplo:def disable(callable):"""Decorates callable and prevents executing it."""def wrap(*args, **kwargs):logging.debug("{0} called but its execution "\"has been prevented".format(callable.__name__))return wrap@disabledef yes(string='y', end='\n'):[...]Funciones decoradoras sin argumentosEn una función decoradora que no recibe argumentos su primer y único parámetro es elcallable decorado en cuestión. Ya en la función anidada es dónde se reciben los argumentosposicionales y de palabra clave que se utilizaron para llamar al callable decorado.Esto puede verse en cualquiera de los decoradores mostrados anteriormente.Funciones decoradoras con argumentosVeremos ahora un ejemplo de función decoradora que recibe argumentos propios. Vamosa trabajar en un equivalente de log_callable que permita especificar si queremos contar ono el número de llamadas.Ejemplo log_callable con argumentos:def log_callable(do_count):if not getattr(log_callable, 'count_dict', None) and do_count:log_callable.count_dict = {}<strong>Python</strong> <strong>Entre</strong> <strong>Todos</strong> (número 1, Agosto 2010) — http://revista.python.org.ar

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!