El día 22 de junio de 2011 08:12, Alexis Roda <alexis.roda.villalo...@gmail.com> escribió:
> Si no me equivoco kwargs solamente tomará valor si llamas a la función con > argumentos con nombre: Además tiene dos problemas: - Altera el nombre y el docstring de la función que decora - No tiene en cuenta los argumentos por defecto (si los hubiera) Lo primero se puede comprobar decorando dos veces una función, y se soluciona usando 'functools.wraps'; para lo segundo, lo más simple es usar 'inspect.getcallargs' import funtools import inspect from functools import wraps from inspect import def log(f): @functools.wraps(f) def inner(*args,**kwargs): #obtener argumentos "reales" callargs=inspect.getcallargs(f, *args, **kwargs) if sincro_config.NIVEL_REGISTRO == 1: archivo_log_ = open(config.LOG_PATH,'a') archivo_log_.write('Ejecutando %s %s\n'%(f.__name__,strftime("%Y-%m-%d %H:%M:%S", localtime()))) archivo_log_.close() elif sincro_config.NIVEL_REGISTRO==2: archivo_log_ = open(config.LOG_PATH,'a') archivo_log_.write('Ejecutando %s %s\n'%(f.__name__,strftime("%Y-%m-%d %H:%M:%S", localtime()))) archivo_log_.write('Parametros Recibos: \n') ### aquí cambia el bucle for name,value in callargs.items(): archivo_log_.write('Nombre: %s\t\tValor: %s\n'%(name,value)) archivo_log_.close() f(*args,**kwargs) ##### también faltaba llamar a la función para que haga su labor return inner _______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/