Python装饰器

   1.首先我们来简单的定义一个函数

def func():
print("这是一个函数")

func():调用该函数结果: 这是一个函数

2.现在我有一个需求,需要在执行这个函数之前打印一句话
那么我怎么做好?
def func():
print("我是打印功能A")
print("这是一个函数")
func() 结果: 我是打印功能A
      这是一个函数
这样是实现了我的需求,但是仔细想想,如果我还要加需求怎么办?依然在func()里面去加吗?显然这样做不好维护
那么我们来调整一下
3.重新定义一个函数
def func_print():
print("我是打印功能A")
func_print()
func() :结果也是一样,这样比之前的代码要好的多了吧。那么现在又有一个问题,假如有人要调用我这个函数并且希望得到这2个语句怎么办?

4.那么好吧,我们在定义一个函数不就行了吗?
def func1():
func_print()
func()
func1():同样的能够解决我们的需求,但是不对阿,我想调用的是func(),你怎么给我func()1? 额,好吧,那我再改改

5.那么我怎么样才能让别人只调用我的func()函数就能得到他想要的效果呢,我记得python中有一个闭包概念,咱们来试试
def func1(f):
def inner():
func_print()
f()
return inner
func = func1(func) :调用外部函数并传入func
func():得到结果,看似很完美的解决了问题,可是还是多了一个调用

6.这里就又要引入一个语法糖的东西了
@func1 :这个地方相当于func = func1(func)
def func():
  print("这是一个函数")
好了 现在调用func()得到的结果就是:
我是打印功能A
这是一个函数
注:本人不是大神,写这些纯粹是为了检验自己和分享一下心得,希望大家能够一起学习。有什么写的不对的地方还望指正,必虚心受教

原文地址:https://www.cnblogs.com/yaoczz/p/10627849.html