Python装饰器@的用法

1 什么是装饰器
python的装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。简单的说装饰器就是一个用来返回函数的函数。

它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。

概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。

2 为什么需要装饰器
2.1 我们先看一个例子
编写函数并调用,输出 I am a student

# 编写函数func()
def func():
    print('I am a student')

# 调用函数
func()

结果:
在这里插入图片描述
2.1 增加需求
现在有一个新的需求,希望可以记录下函数的执行日志,于是在代码中添加日志代码

# 编写函数func()
def func():
    print('I am a student')
    print('func is running')

# 调用函数
func()

结果:
在这里插入图片描述

3.1 又有需求
假设现在有1000个函数需要增加这个需求,并且后续可能还要对这1000函数都增加执行前打印日志的需求,怎么办?还一个个改吗?
当然不是!,这样会造成大量雷同的代码,为了减少重复写代码,我们可以这样做,重新定义一个函数:专门处理日志 ,日志处理完之后再执行真正的业务代码。

def use_logging(func):
  print("%s is running" % func.__name__)
  func()
  
def func():
  print('i am a student')
  
use_logging(func)

结果:
在这里插入图片描述
通过以上use_logging函数我们增加了日志功能,不管以后有多少函数需要增加日志或者修改日志的格式我们只需要修改use_logging函数,并执行use_logging(被装饰的函数)就达到了我们想要的效果。

def use_logging(func):
  print("%s is running" % func.__name__)
  return func
@use_logging
def func():
  print('I am a student')

func()

这部分还有其他内容,等待更新。。

参考和引用

https://www.cnblogs.com/arvin-feng/p/11108799.html

猜你喜欢

转载自blog.csdn.net/AugustMe/article/details/102647131