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

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

到此这篇关于Python装饰器的应用场景及实例用法的文章就介绍到这了,更多相关Python装饰器的应用场景内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python装饰器的应用场景代码总结

    装饰器的应用场景 附加功能 数据的清理或添加: 函数参数类型验证 @require_ints 类似请求前拦截 数据格式转换 将函数返回字典改为 JSON/YAML 类似响应后篡改 为函数提供额外的数据 mock.patch 函数注册 在任务中心注册一个任务 注册一个带信号处理器的函数 不同应用场景下装饰器实现 函数注册表 简单注册表 funcs = [] def register(func): funcs.append(func) return func @register def a(): r

  • Python装饰器实现方法及应用场景详解

    应用场景: 1.授权(Authorization) 装饰器能有助于检查某个人是否被授权去使用一个web应用的端点(endpoint).它们被大量使用于Flask和Django web框架中.这里是一个例子来使用基于装饰器的授权: from functools import wraps # 最新版python引用是 import functools def requires_auth(f): # f 就是我们需要装饰的函数,一看就是不带参数的装饰器 @wraps(f) # 新版python写法 @

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

    1.说明 装饰本质上是一个Python函数,它能使其他函数在没有任何代码变化的情况下增加额外的功能.有了装饰,我们可以抽出大量与函数功能无关的相同代码,继续重用. 2.应用场景 包括插入日志.性能测试.事务处理.缓存和权限验证. 3.实例 # 装饰器 # func指函数 def decorator(func): def wrapper(*args, **kwargs): # 执行函数内部逻辑 打印时间 print(time.time(), args, kwargs) # 执行调用函数中逻辑 打印

  • 使用python装饰器计算函数运行时间的实例

    装饰器在python里面有很重要的作用, 如果能够熟练使用,将会大大的提高工作效率 今天就来见识一下 python 装饰器,到底是怎么工作的. 本文主要是利用python装饰器计算函数运行时间 一些需要精确的计算函数运行了多久的程序,都可以采用这种方法 #coding:utf-8 import urllib2,re,time,random,os,datetime import HTMLParser import sys reload(sys) sys.setdefaultencoding('ut

  • python装饰器代替set get方法实例

    对于变量的访问和设置,我们可以使用get.set方法,如下: class student: def __init__(self,name): self.__name = name def get_name(self): return self.__name def set_name(self,name): self.__name = name 我们也可以使用python 的装饰器,用@语法糖,使得我们要使用set get功能时只需要通过.xx的形式即可 class student1: def _

  • Python装饰器用法实例总结

    本文实例讲述了Python装饰器用法.分享给大家供大家参考,具体如下: 一.装饰器是什么 python的装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象.简单的说装饰器就是一个用来返回函数的函数. 它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓存.权限校验等场景.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用. 概括的讲,装饰器的作用就是为已经

  • python装饰器实例大详解

    一.作用域 在python中,作用域分为两种:全局作用域和局部作用域. 全局作用域是定义在文件级别的变量,函数名.而局部作用域,则是定义函数内部. 关于作用域,我们要理解两点: a.在全局不能访问到局部定义的变量 b.在局部能够访问到全局定义的变量,但是不能修改全局定义的变量(当然有方法可以修改) 下面我们来看看下面实例: x = 1 def funx(): x = 10 print(x) # 打印出10 funx() print(x) # 打印出1 如果局部没有定义变量x,那么函数内部会从内往

  • Python装饰器实现几类验证功能做法实例

    最近新需求来了,要给系统增加几个资源权限.尽量减少代码的改动和程序的复杂程度.所以还是使用装饰器比较科学 之前用了一些登录验证的现成装饰器模块.然后仿写一些用户管理部分的权限装饰器. 比如下面这种 def permission_required(permission): def decorator(f): @wraps(f) def decorated_function(*args, **kwargs): if not current_user.can(permission): abort(40

  • Python装饰器decorator用法实例

    本文实例讲述了Python装饰器decorator用法.分享给大家供大家参考.具体分析如下: 1. 闭包(closure) 闭包是Python所支持的一种特性,它让在非global scope定义的函数可以引用其外围空间中的变量,这些外围空间中被引用的变量叫做这个函数的环境变量.环境变量和这个非全局函数一起构成了闭包. 复制代码 代码如下: def outer(x):     y = [1,2,3]     def inner():         print x         print y

  • 基于Python 装饰器装饰类中的方法实例

    title: Python 装饰器装饰类中的方法 comments: true date: 2017-04-17 20:44:31 tags: ['Python', 'Decorate'] category: ['Python'] --- 目前在中文网上能搜索到的绝大部分关于装饰器的教程,都在讲如何装饰一个普通的函数.本文介绍如何使用Python的装饰器装饰一个类的方法,同时在装饰器函数中调用类里面的其他方法.本文以捕获一个方法的异常为例来进行说明. 有一个类Test, 它的结构如下: clas

  • Python装饰器的执行过程实例分析

    本文实例分析了Python装饰器的执行过程.分享给大家供大家参考,具体如下: 今天看到一句话:装饰器其实就是对闭包的使用,仔细想想,其实就是这回事,今天又看了下闭包,基本上算是弄明白了闭包的执行过程了.其实加上几句话以后就可以很容易的发现,思路给读者,最好自己总结一下,有助于理解.通过代码来说吧. 第一种,装饰器本身不传参数,相对来说过程相对简单的 #!/usr/bin/python #coding: utf-8 # 装饰器其实就是对闭包的使用 def dec(fun): print("call

随机推荐