我们在日常生活中使用手机时都有如下体验:
当我需要阅读书籍时,下载一个阅读器,就可以愉快的看书了;
当我需要看电影时,下载一个视频APP,就可以看电影了;
...
像这样的场景每天都在发生。
当我们需要某个功能时,下载一个合适的APP即可!
现在来说说python的装饰器,他就像手机APP一样,当我给某个函数加上特定的装饰器之后,该函数就新增了该装饰器的功能(装饰器的本质也是函数)。就像手机安装了特定的APP一样。
下面是一个代码示例:
import logging
def use_logging(func):
def wrapper(*args,**kwargs):
logging.warn('%s is running...'%func.__name__)
return func(*args)
return wrapper
def foo():
print('i am foo.')
@use_logging
def bar():
print('i am bar.')
bar()
print('===========================')
'''
bar()的效果等效于下面代码
'''
a = use_logging(foo) #wrapper的实例对象
print(a)
a() #执行wrapper()函数
执行结果:
WARNING:root:bar is running...
i am bar.
===========================
<function use_logging.<locals>.wrapper at 0x000000F7833B6158>
WARNING:root:foo is running...
i am foo.
[Finished in 0.1s]