博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

python学习之装饰器

Posted on 2017-08-07 10:23  开飞机的贝塔  阅读(100)  评论(0编辑  收藏  举报

我们在日常生活中使用手机时都有如下体验:

当我需要阅读书籍时,下载一个阅读器,就可以愉快的看书了;

当我需要看电影时,下载一个视频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]