注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

旷世的忧伤

不与夏虫语寒,不与曲人语道,因为生命缺乏言说的条件......

 
 
 

日志

 
 

Python装饰器  

2014-10-24 11:42:55|  分类: Python示例代码 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
Python装饰器的作用就是为已经存在的对象添加额外的功能。
例如装饰器可以用来:
        引入日志
        添加计时逻辑来检测性能
        给函数加入事务处理


#! /usr/bin/env python:
# -*- coding: utf-8 -*-

# *************************************************************
# Filename @ deco.py
# Author @ Huoty
# Create date @ 2014-10-24 10:09:52
# Description @ 装饰器
# *************************************************************

from time import ctime, sleep

def tsfunc(func):
def wrapperFunc():
print "[%s] %s() called" % (ctime(), func.__name__)
return func()
return wrapperFunc # 相当于返回一个函数指针

@tsfunc
def foo():
def foo():
pass
# foo = tsfunc(foo),tsfunc返回wrapperFunc,即foo 变成了 wrapperFunc
# 所以调用foo, 就等于是调用了wrapperFunc ********
# 也可以说wrapperFunc是装饰过的func

# Script starts from here
foo()
sleep(4)

for i in range(2):
sleep(1)
foo()

运行结果:

[Fri Oct 24 11:37:33 2014] foo() called
[Fri Oct 24 11:37:38 2014] foo() called
[Fri Oct 24 11:37:39 2014] foo() called

参考:http://www.cnblogs.com/PandaBamboo/archive/2013/01/17/2865003.html

#! /usr/bin/env python
# -*- coding: utf-8 -*-

# *************************************************************
# Filename @ checkdoc.py
# Author @ Huoty
# Create date @ 2014-10-24 11:09:40
# Description @ 装饰器
# *************************************************************

def deco_functionNeedDoc(func):
if func.__doc__ == None :
print func, "has no __doc__, it's a bad habit."
else:
print func, ':', func.__doc__, '.'

# 以上部分在初始化时就会被执行
return func # 返回func本身,所以调用func,

# 执行的还是func本身,等于没有装饰过一样

@deco_functionNeedDoc
def f():
print 'f() Do something'

@deco_functionNeedDoc
def g():
'I have a __doc__'
print 'g() Do something'

# Script starts from here

f() # 被装饰器装饰后的执行结果取决于装饰函数的是想,
g() # 如果装饰函数返回被装饰函数本身,就等于没有装饰,
# 如果装饰函数对被装饰函数进行了包装,并返回包装后的函数,
# 那调用函数时执行的就是包装过的函数
# 本例中没有对函数进行额外的包装,只是一开始就判断函数时候有说明文档
# 这一部分会在初始化时被执行,也就是说,不调用函数这一部分也会被执行

运行结果:

<function f at 0x9d1b3ac> has no __doc__, it's a bad habit.
<function g at 0x9d1b72c> : I have a __doc__ .
f() Do something
g() Do something

参考:http://blog.csdn.net/thy38/article/details/4471421
  评论这张
 
阅读(2)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018