- import logging
- LOG_FILENAME = "Log_test.txt"
- LOG_FORMAT = '%(levelname)s: (%(asctime)s) %(message)s'
- logging.basicConfig(filename=LOG_FILENAME, level=logging.NOTSET, format=LOG_FORMAT)
- logger = logging.getLogger()
- # example
- def mydecorator(arg1, arg2):
- print "level 1 : Arg1=%s, arg2=%s" % (arg1, arg2)
- def newdec(func):
- print 'level 2 : newdec was called. the arg is func=%s' % func
- def replace(self, x, y):
- print "level 3 : replace was called. self is %s, x=%s, y=%s" % (str(self), str(x), str(y))
- return func(self, x, y)
- return replace
- return newdec
- # log
- def log_wrapper(func):
- def log_func_name(self, *args, **kws):
- logger.debug("function: %s", func.func_name)
- logger.debug("arg: %s, %s", [arg for arg in args], kws)
- result = func(self, *args, **kws)
- logger.debug("result:%s", result.__str__())
- return result
- return log_func_name
- # cache & IO
- class Memorized(object):
- def __init__(self, ttl = 300):
- self.ttl = ttl
- def __call__(self, func):
- def wrapper(obj, *args):
- cache = obj.__dict__.setdefault("cache", {})
- now = time.time()
- key_name = self.func.func_name + str(args)
- try:
- value, timestamp = cache[key_name]
- if now - timestamp > self.ttl:
- raise KeyError
- except KeyError:
- value = self.func(obj, *args)
- cache[key_name] = (value, now)
- return value
- return wrapper
- class A2:
- def __init__(self):
- pass
- @mydecorator('Hello', 'word.')
- @log_wrapper
- @Memorized(10)
- def method(self, x, y):
- print x, y
- if __name__ == '__main__':
- a = A2()
- a.method(1, 2)
- #该片段来自于http://www.codesnippet.cn/detail/231020136612.html
来源: http://www.codesnippet.cn/detail/231020136612.html