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函数,它可以实现自己函数体内的功能,以及装饰函数函数体内的功能
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学习系列之python装饰器基础(2)---装饰含返回值的函数
- Python学习入门基础教程(learning Python)--2.1 Python下自定义函数 .
- python基础学习-3(函数)
- 函数:内嵌函数和闭包 - 零基础入门学习Python020
- 函数名function是一个数据类型,可以赋值 分类: python基础学习 2013-09-12 11:01 366人阅读 评论(0) 收藏
- python常用函数总结 分类: python基础学习 2014-02-07 14:12 260人阅读 评论(0) 收藏
- Python学习入门基础教程(learning Python)--2.3.1 Python传参函数设计
- Python学习入门基础教程(learning Python)--6.4 Python的list与函数
- 《Python 学习手册4th》 第十六章 函数基础
- Python学习 Day 5 高阶函数 map/reduce filter sorter 返回函数 匿名函数 装饰器 偏函数
- Python基础函数学习笔记(一)
- PYTHON基础学习之操作类的一些函数
- .Net程序员之Python基础教程学习----函数和异常处理[Fifth Day]
- Python基础函数学习笔记(三)
- 深入学习Django源码基础2 - python多态技巧-运行时判断函数
- [Python学习] 专题一.函数的基础知识
- Python学习入门基础教程(learning Python)--8.3 字典常用的方法函数介绍
- python 函数装饰器学习
- Python学习入门基础教程(learning Python)--2 Python简单函数设计 .