美文网首页我爱编程
python中修饰器使用

python中修饰器使用

作者: 氕氘氚0921 | 来源:发表于2018-07-16 15:15 被阅读53次

装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等应用场景。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用.概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。
在python中使用修饰器的方法通常有以下两种,一种是带参数的,一种是不带参数的。
先说第一种简单的,不带参数的修饰器。代码如下:

def decorator(func):
    def instance(*args, **kw):
        print("hello")
        return func(*args, **kw)
    return instance

@decorator
def test():
    print("test")

程序在一开始执行的时候会将test作为参数传进decorator中,也就是decorator的参数func,将返回值instance作为新的test来用。可以理解为:

test = decorator(test)

在之后所有test将由这个新的方法来执行。

还有一种修饰器是需要传参数的,有时候需要参数来决定某些程序逻辑。这种修饰器需要在第一种的基础上再加一级方法,代码如下:

def decorator_with_args(arguments):
    def decorator(func):
        def instance(*args, **kw):
            print(arguments)
            return func(*args, **kw)
        return instance
    return decorator

@decorator_with_args("haha")
def test():
    print("test")

这个修饰器可以理解为decorator_with_args是一个执行函数,执行的结果是一个修饰器。那么就变成了先执行函数decorator_with_args("haha"),他的返回值是decorator,而真正的修饰器是decorator。decorator_with_args是传递参数来使用的。
以上就是个人对python中函数的修饰器的理解。

相关文章

  • Python中property中的小坑

    刚刚了解了python中的@property的使用,property本质是python中的一个内置修饰器。使用大概...

  • Python @property 详解

    一、概述 python中 @property 是python的一种装饰器,是用来修饰方法的。我们可以使用@pro...

  • Python 中修饰器

    修饰器就是一个返回函数的高阶函数 如果decorator本身需要传入参数,那就需要编写一个返回decorator的...

  • Python装饰器高级用法

    转载至:Python装饰器高级用法 在 Python 中, 装饰器 一般用来修饰函数,实现公共功能,达到代码复用的...

  • python中修饰器使用

    装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返...

  • 谈谈python修饰器

    前言 对python的修饰器的理解一直停留在"使用修饰器把函数注册为事件的处理程序"的层次,也是一知半解;这样拖着...

  • Python修饰器

    前话: python的修饰器可以说是python语言最有灵性的一个功能了,看到网上有各种乱乱的文章,所以想自己写得...

  • python修饰器

    介绍修饰器之前首先要介绍两个参数 基础用法 传递参数 *报错 这个修饰器可以简化 functools已经封装好了

  • python修饰器

    1 什么是装饰器 装饰器他人的器具,本身可以是任意可调用对象,被装饰者也可以是任意可调用对象。本质就是函数,功能就...

  • python修饰器

    1、参数args与kwargs: *args是元组,如def fun(args): pass 传过去的参数是元组形...

网友评论

    本文标题:python中修饰器使用

    本文链接:https://www.haomeiwen.com/subject/qxlbpftx.html