对Python 函数修饰符的一些理解

函数修饰符,这个东西在Python中困扰了我很久,网上查的资料也是乱七八糟的,今天特意花了点时间整理了一下。写这篇文章的目的,1.为了让自己留下更为深刻的印象;2.给对函数修饰符不太了解的学者一些借鉴吧

我把函数修饰符分为两类,一类是不带参的函数修饰符。看代码

def de_no_arg(fn):

    def check(arg):
        print "---do some other thing---"
        fn(arg)    

    return check

@de_no_arg
def no_arg_func(arg):            # 此修饰相当于  no_arg_func=de_no_arg(no_arg_func)
    print "---the origin func is doing something---"

no_arg_func("param")

这里说的不带参,表示函数修饰符不带除了要修饰的函数之外的参数。这个修饰的结果正如注释所说: no_arg_func=de_no_arg(no_arg_func)

另一类是带参的函数修饰符

def de_has_arg(arg1,arg2,*arg3,**arg4):

    def temp(arg1,arg2,arg3,arg4,func):
        print "__do some other thing__"
        print "__print the argments__:",arg1,arg2,arg3,arg4
        return func

    return partial(temp,arg1,arg2,arg3,arg4)
# 此修饰相当于 tmpfunc=de_has_arg(1,2,3,4,5,5,a=1,b=2)  
#  has_arg_func=tmpfunc(has_arg_func)
@de_has_arg(1,2,3,4,5,5,a=1,b=2)
def has_arg_func():            
    print "__the origin func is doing something__"

has_arg_func()

注意:在此类中,修饰函数本身是不带有 被修饰函数 参数的。

也如注释所说,修饰结果为:tmpfunc=de_has_arg(1,2,3,4,5,5,a=1,b=2) has_arg_func=tmpfunc(has_arg_func)

总结一下:

记住这两个东西就够用了:

1.无参修饰:no_arg_func=de_no_arg(no_arg_func)

2.带参修饰:tmpfunc=de_has_arg(1,2,3,4,5,5,a=1,b=2) has_arg_func=tmpfunc(has_arg_func)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值