zoukankan      html  css  js  c++  java
  • Python编程之基础知识练习_005

    练习内容:使用两种不同方式,编写一个可接受参数的logging装饰器函数

    方式一:

     1 __author__ = 'Orcsir'
     2 from functools import wraps
     3 import logging
     4 
     5 
     6 def logged(level, name=None, message=None):
     7     def decorate(func):
     8         logname = name if name else func.__module__
     9         log = logging.getLogger(logname)
    10         logmsg = message if message else func.__name__
    11 
    12         @wraps(func)
    13         def wrapper(*args, **kwargs):
    14             log.log(level, logmsg)
    15             return func(*args, **kwargs)
    16 
    17         return wrapper
    18 
    19     return decorate
    20 
    21 # Test
    22 @logged(logging.DEBUG)
    23 def add(x, y):
    24     print("add func")
    25     return x + y
    26 
    27 
    28 @logged(logging.WARNING, message='example')
    29 def spam():
    30     print("Spam")
    31 
    32 add(1, 2)
    33 spam()

    方式二:使用partial函数,减少装饰器内部函数定义

     1 __author__ = 'Orcsir'
     2 
     3 from functools import wraps, partial
     4 import logging
     5 
     6 
     7 def logged(func=None, level=logging.INFO, name="", message=""):
     8     if func is None:
     9         return partial(logged, level=level, name=name, message=message)
    10 
    11     logname = name if name else func.__module__
    12     log = logging.getLogger(logname)
    13     logmsg = message if message else func.__name__
    14 
    15     @wraps(func)
    16     def wrapper(*args, **kwargs):
    17         log.log(level, logmsg)
    18         return func(*args, **kwargs)
    19 
    20     return wrapper
    21 
    22 
    23 # Test
    24 @logged(level=logging.WARNING)
    25 def add(x, y):
    26     print("add func")
    27     return x + y
    28 
    29 
    30 @logged(level=logging.WARNING, message='example')
    31 def spam():
    32     print("Spam")
    33 
    34 add(1, 2)
    35 spam()
  • 相关阅读:
    easyui多选与接收不一致解决方案
    PEP8规范总结
    python2与python3的区别
    双下方法(魔术方法内置方法)
    文件操作
    抽象类,接口类,归一化设计,多态,鸭子类型
    html
    数据库的初识
    boby标签中相关标签
    爬虫介绍
  • 原文地址:https://www.cnblogs.com/orcsir/p/9122356.html
Copyright © 2011-2022 走看看