您的位置:首页 > 编程语言 > Python开发

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

2017-07-04 23:33 357 查看
函数修饰符,这个东西在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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: