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

Python基础学习:函数装饰器

2018-03-16 10:50 423 查看
装饰器是python中非常实用的函数表达法,尽头我们不讲装饰器原理,只讲怎么应用。装饰器原理涉及面向对象以及函数本身也可以作为一个参数被传递,原理比较简单,但由于循环嵌套初学者难以理解。既然难以理解,那就先学会怎么用,有了经验,理解起来就相对容易了。首先我们要明白,装饰器内函数是先于被装饰函数执行的。
1.最简单的装饰器def test(func): #不带参数的函数装饰器最外层,也是该装饰器的名字
def wrapper(*args,**kwargs): #装饰函数,一般不建议修改名称和括号内参数,
#以确保被装饰函数的参数可以被顺利传递,也可
#根据被装饰函数的参数进行修改
print('This is wrapper lambda function')#装饰函数自身的函数体,你所
#要为被装饰函数增添的功能应当在这里写出
return func(*args,**kwargs)#装饰函数返回值,不建议修改,若修改理由同该函数定义层所述。此外,已经在上面语句调用了被装饰函数的话,可以修改为自己需求的返回值。
return wrapper #返回值为装饰函数名,需随其名称改变而改变,一般不建议修改

@test #装饰器语法糖,表明用该装饰器装饰紧跟其下定义的函数
def test_1(): #被装饰函数
print("This is decorated function") #被装饰的函数函数体

test_1() #调用被装饰后的test_1函数,它可以实现自己函数体内的功能,以及装饰函数函数体内的功能
2.带参数的装饰器
带参数的装饰器需要三层结构def test(para_1): #不带参数的函数装饰器最外层,也是该装饰器的名字,其参数为装饰函数所需要的参数,
#该参数在装饰器语法糖内被赋值
def decorator(func)
def wrapper(*args,**kwargs): #装饰函数,一般不建议修改名称和括号内参数,
#以确保被装饰函数的参数可以被顺利传递,也可
#根据被装饰函数的参数进行修改,可以在该函数
#内使用装饰器语法糖内传递进来的参数

if para_1 == 'true' #装饰函数自身的函数体,你所
print('This is wrapper lambda function')#要为被装饰函数增添的功能应当在这里写出

return func(*args,**kwargs)#装饰函数返回值,不建议修改,若修改理由同该函数定义层所述
return wrapper #返回值为装饰函数名,需随其名称改变而改变,一般不建议修改

return decorator #返回值为第二层装饰函数名,一般不要修改,它只是为了让参数
#传递符合语法规范才出现

@test(para_1 = 'true') #装饰器语法糖,表明用该装饰器装饰紧跟其下定义的函数
def test_1(): #被装饰函数
print("This is decorated function") #被装饰的函数函数体

test_1() #调用被装饰后的test_1函数,它可以实现自己函数体内的功能,以及装饰函数函数体内的功能
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 函数装饰器