python笔记--装饰器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python笔记--装饰器相关的知识,希望对你有一定的参考价值。
装饰器
装饰器作用就是为自定义的函数添加功能,高阶函数和闭包结合使用就可以形成装饰器。简单举例说明:
#-*- coding:utf-8 -*- #假如我们有多个函数需要执行,但是执行前需要手工确认 import sys def my_print(): print ("this is a test!") def confirm(f): def inner(): my_confirm=input("是否继续yes/no:") if my_confirm == 'yes': f() else: sys.exit() return inner my_print=confirm(my_print) my_print()
python支持一种友好的写法,可以省去再次定义原来的函数:
#-*- coding:utf-8 -*- import sys def confirm(f): def inner(): my_confirm=input("是否继续yes/no:") if my_confirm == 'yes': f() else: sys.exit() return inner @confirm #在需要调用判断功能的函数前加@ def my_print(): print ("this is a test!") my_print()
如果被装饰的功能函数有参数,在装饰器内部也要添加对应的参数,简单举例说明:
#-*- coding:utf-8 -*- #装饰器之功能函数加参数 import sys def confirm(f): def inner(*x,**y): my_confirm=input("是否继续yes/no:") if my_confirm == 'yes': f(*x,**y) #注意f和inner的参数要一一对应 else: sys.exit() return inner @confirm def my_sum(*a,**b): result=0 for i in a: result+=i print(result) my_sum(1,2,3,4,5)
如果再为装饰器添加一个功能,并且装饰器可以传参,只需要在原有装饰器外部再添加一层嵌套函数,简单举例说明:
#-*- coding:utf-8 -*- import sys def judge(default=0): def confirm(f): def inner(*x,**y): my_confirm=input("是否继续yes/no:") if my_confirm == 'yes': print(f(*x,**y)) if f(*x,**y) > int(default): print('more') else: print('less') else: sys.exit() return inner return confirm @judge(10) def my_sum(*a,**b): result=0 for i in a: result+=i return(result) my_sum(1,2,3,4,5)
以上是关于python笔记--装饰器的主要内容,如果未能解决你的问题,请参考以下文章