函数修饰符,这个东西在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)