python
装饰器(Decorators)是 Python 的一个重要部分。简单地说:他们是修改其他函数的功能的函数。他们有助于让我们的代码更简短,也更Pythonic(Python范儿)。
大多数初学者不知道在哪儿使用它们,哪些区域里装饰器可以让你的代码更简洁。
1、首先,我们来从函数的最基本的介绍起。
#函数是对一个功能模块进行封装 函数在定义完成后进行调用使用
#打印hello world ——》 无参函数 def hello(): print("hello world!") hello()
#计算两个数的和 ———》 有参函数
def sum_2_number(num1,num2):
#return 返回后面结果给调用方
return num1+num2
print(sum_2_number(2,5))
2、那么我们现在假设有这样的一种场景:有2个部门需要再本部门业务执行之前进行审核流程!
#有2个部门需要再本部门业务执行之前进行审核流程!(假设每个部门在执行业务前都有三个审核流程要走。走的流程是一样的,但是具体操作不一样。) #方式一:最笨的实现方式办法 def dep1(): print("审核1") print("审核2") print("审核3") print("部门1的业务") def dep2(): print("审核1") print("审核2") print("审核3") print("部门2的业务") dep1() dep2()
#方式二:这时有人想到优化解决方案,把部门的审核流程提出来作为一个单独的函数 def check(): print("审核1") print("审核2") print("审核3") def dep1(): check() print("部门1的业务") def dep2(): check() print("部门2的业务") dep1() dep2()
方式二这样修改,不符合开放封闭原则(软件设计本身所追求的目标就是封装变化、降低耦合。软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。)。我们写代码的时候,不能只考虑功能的实现,还需要考虑维护以及企业的经营原则等情况。
这时候我们就可以使用到装饰器了。#装饰器:函数嵌套定义基础完成
def verify(func): def check(): print("审核1") print("审核2") print("审核3") func() return check
#语法糖
#@verify 等效f1=verify(f1) @verify def dep1(): print("部门1的业务") @verify def dep2(): print("部门2的业务") dep1() dep2()
装饰器在django、flask框架中使用的比较多。例如,我们在flask中实现一个最简单的hello
from flask import Flask app=Flask(__name__) @app.route("/") def hello(): return "hello" if __name__=="__main__": app.run()
实现效果如下: