自学python学到这里自觉没有理解透装饰器的精髓,看到知乎一篇文章感觉讲的很好。全程会心一笑看完。
下面是一个简单的装饰器的应用
#使用装饰器改变函数行为
from string import punctuation
def pipeline_wrapper(func):#func表示被装饰函数
def to_lower(x):
return x.lower()
def remove_punc(x):
for p in punctuation:
x=x.replace(p,' ')
return x
def wrapper(*args,**kwargs):
x=to_lower(*args,**kwargs)#当参数不确定时,可用*args和*kwargs\
#*args可当做可容纳多个变量的list\
#*kwargs可当做可容纳多个键和值的字典
x=remove_punc(x)
return func(x)
return wrapper#返回wrapper函数
@pipeline_wrapper #装饰器函数,名称为装饰器的名称
def tokenize_whitespace(inText):
return inText.split()
s="string.With.Punctuation?"
print tokenize_whitespace(s)#先运行装饰器,再运行被装饰的函数
运行结果为
['string', 'with', 'punctuation']
运行print tokenize_whitespace(s)
的步骤为先运行装饰器,然后运行被装饰的函数,所以先转成小写,然后把标点替换成空格,最后split分开
关于def pipeline_wrapper(func)
中func的说明:
这里的func指被装饰的函数
@decorator_a
def f(x):
print 'Get in f'
return x*2
#相当于
def f(x):
print 'Get in f'
return x*2
f=decorator_a(f)