Python装饰器的应用场景及实例用法

作者:小妮浅浅 时间:2022-06-24 16:09:03 

1、说明

装饰本质上是一个Python函数,它能使其他函数在没有任何代码变化的情况下增加额外的功能。有了装饰,我们可以抽出大量与函数功能无关的相同代码,继续重用。

2、应用场景

包括插入日志、性能测试、事务处理、缓存和权限验证。

3、实例


# 装饰器
# func指函数
def decorator(func):
   def wrapper(*args, **kwargs):
       # 执行函数内部逻辑 打印时间
       print(time.time(), args, kwargs)
       # 执行调用函数中逻辑 打印不同参数
       func(*args, **kwargs)
   return wrapper
# 一个参数
@decorator
def function(param):
   print('function : this is decorator ' + param)
# 两个参数
@decorator
def function1(param1, param2):
   print('function1 : this is decorator ' + param1)
   print('function1 : this is decorator ' + param2)
# 三个参数(可变参数)
@decorator
def function2(param1, param2, **kwargs):
   print('function2 : this is decorator ' + param1)
   print('function2 : this is decorator ' + param2)
   print(kwargs)
function('param')
function1('param1' , 'param2')
function2('param1' , 'param2', x=1,y=2,z=3)

内容扩展:

函数注册表

简单注册表


funcs = []
def register(func):
 funcs.append(func)
 return func    
@register
def a():
 return 3

@register
def b():
 return 5  
# 访问结果
result = [func() for func in funcs]

注册表隔离(使用类的不同实例)


class Registry(object):
 def __init__(self):
   self._funcs = []

def register(self, func):
   self._funcs.append(func)

def run_all(self):
   return [func() for func in self._funcs]
r1 = Registry()
r2 = Registry()

@r1.register
def a():
 return 3

@r2.register
def b():
 return 5

@r1.register
@r2.register

来源:https://www.py.cn/jishu/jichu/29571.html

标签:Python,装饰器,应用场景
0
投稿

猜你喜欢

  • asp封装dll源码分享

    2008-09-25 17:20:00
  • 进行数据处理的6个 Python 代码块分享

    2022-10-21 12:56:18
  • 查询数据表中的记录(SELECT)

    2009-02-27 16:06:00
  • FSO组件之文件操作(下)

    2010-05-03 11:10:00
  • python 2.7.13 安装配置方法图文教程

    2023-11-13 11:54:37
  • 详解Django将秒转换为xx天xx时xx分

    2023-06-14 22:52:12
  • HTML与CSS在Flash中的应用

    2008-01-23 19:13:00
  • SQL Server 2008的一些新特点及独到之处

    2009-01-15 12:59:00
  • 也谈用户体验

    2009-07-15 12:56:00
  • python微信好友数据分析详解

    2022-01-27 20:36:39
  • Python通过2种方法输出带颜色字体

    2023-02-08 20:53:22
  • 搜索结果页(SERP)之:不要被F型浏览忽悠了

    2009-09-07 12:34:00
  • 在IE中使用高级CSS3选择器

    2010-01-22 15:20:00
  • optgroup、sub、sup和bdo标签

    2009-07-26 18:39:00
  • 事件检测

    2009-04-11 18:03:00
  • python实现简单的五子棋游戏

    2023-07-30 13:24:31
  • SQL Server技巧之快速得到表的记录总数

    2011-01-04 14:36:00
  • 别开生面:纯CSS实现相册滑动浏览

    2008-06-26 13:24:00
  • 使用python进行文本预处理和提取特征的实例

    2022-07-13 21:25:47
  • php中iconv函数使用方法

    2023-06-12 08:11:07
  • asp之家 网络编程 m.aspxhome.com