python 装饰器

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()

  实现效果如下:

原文地址:https://www.cnblogs.com/benpao1314/p/12092754.html