本文主要是介绍Python学习基础笔记七十六——Python装饰器2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
装饰器,英文名字decorator。
我们开发Python代码的时候,经常碰到装饰器。
通常被装饰后的函数,会在原来的函数的基础上,增加一些功能。
通常装饰器本事也是一个函数,那么装饰器是怎么装饰另外一个函数的呢?
假设,你进入一家公司,领导要求你在老代码的基础上继续开发。
import time
def getXXXTime():return time.strftime('%Y_%m_%d %H:%M:%S',time.localtime())
import time# 定义一个装饰器函数
def sayLocal(func):def inner():ret = func()return f'当地时间: {ret}'return innerdef getXXXTime():return time.strftime('%Y_%m_%d %H:%M:%S',time.localtime())# 装饰getXXXTime()
getXXXTime = sayLocal(getXXXTime)print(getXXXTime())
我们再看下之前的装饰器的通用模板:
def wrapper(f): # 装饰器wrapperdef inner(*args, **kwargs): '''在装饰前要做的事情''' ret = f(*args, **kwargs) # 被装饰的函数'''在装饰后要做的事情'''return retreturn inner@wrapper # 装饰器函数名
def func(a, b): # 被装饰的函数
import time# 定义一个装饰器函数
def sayLocal(func):def inner():ret = func()return f'当地时间: {ret}'return inner@sayLocal
def getXXXTime():return time.strftime('%Y_%m_%d %H:%M:%S',time.localtime())# 装饰getXXXTime()
# getXXXTime = sayLocal(getXXXTime)print(getXXXTime())
sayLocal函数是一个装饰器,它装饰了参数函数的行为。
以@sayLocal开头后面接装饰器函数的这种写法,是一种语法糖,也就是便捷的写法。
装饰器经常被用在库和框架中,给别的开发者使用。
这些库的开发者预料到 使用者 开发的函数可能需要 一些增强的功能。
但是 这些库的开发者 没法去改使用者的代码, 就可以把这些增强的部分做在 装饰器函数中。
这样使用者,只需要在他们的函数前面上@xxx 就使用了这些增强的功能了。
开放封闭原则:
1)多拓展是开放的;
2)对修改是封闭的;
目的是维护代码的稳定性,这个就是装饰器存在的意义。
这篇关于Python学习基础笔记七十六——Python装饰器2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!