1.15使用装饰器改变函数行为

来源:互联网 发布:交通数据开放平台 编辑:程序博客网 时间:2024/05/29 11:23

自学python学到这里自觉没有理解透装饰器的精髓,看到知乎一篇文章感觉讲的很好。全程会心一笑看完。

如何理解Python装饰器? - 李冬的回答 - 知乎

下面是一个简单的装饰器的应用

#使用装饰器改变函数行为from string import punctuationdef 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_adef f(x):    print 'Get in f'    return x*2#相当于def f(x):    print 'Get in f'    return x*2f=decorator_a(f)
原创粉丝点击