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

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

如何理解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)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值