笔记—python装饰器的用法

原创 2018年04月16日 19:44:38

    装饰器可以简单理解为修饰,为函数添加额外的功能,但是又不用修改原来函数的代码,只需要在原来函数定义前面使用@语法糖即可。它经常用于插入日志等类似的场景,可以达到重复使用而又不修改主要函数代码的目的。

看第一个例子:一个函数

def printName():
    print('LiHaiyu')

printName()

输出:LiHaiyu

看第二个例子:简单的装饰器函数

def mydecorator(f):
    def wrapper(): # 定义修饰函数
        print('Before calling the function')
        f()
        print('After calling the function')
    return wrapper #注意返回函数形成闭包

@mydecorator
def printName():
    print('LiHaiyu')

printName()
输出:


提醒:@mydecorator 必须置于被修饰函数定义之前。相当于将 printName 函数传递给装饰器函数,当调用 printName() 时相当于执行装饰器函数。

第三个例子:函数带参数

def mydecorator(f):
    def wrapper(*args, **kwargs):
        print('Before calling the function')
        f(*args, **kwargs)
        print('Before calling the function')
    return wrapper

@mydecorator
def printName(name):
    print(name)

printName("LiHaiyu")

输出:同上

提醒:*args 表示传递一个列表参数,**kwargs 表示传递一个字典参数。所以在 call function 的时候也应该传递参数

第四个例子:装饰器带参数

def mydecorator(msg = 'Message'):
    def decorated(f):
        def wrapper(*args,**kwargs):
            print('The message is : '+ msg)
            print('Before calling the function')
            f(*args,**kwargs)
            print('After calling the function')
        return wrapper
    return decorated

@mydecorator(msg = 'print name')
def printName(name):
    print(name)

printName('LiHaiyu')

输出:


提醒:返回函数

参考链接:https://www.youtube.com/watch?v=mZ5IwFfqvz8




Python中的装饰器及@用法详解

转载请注明出处:http://blog.csdn.net/tyhj_sf/article/details/77417455这篇文章主要介绍了Python中的装饰器用法,以实例形式详细的分析了Pytho...
  • tyhj_sf
  • tyhj_sf
  • 2017年08月20日 00:49
  • 530

python -- 装饰器的高级应用

装饰器和装饰器模式 装饰器模式是面向对象的一种设计模式,支持将行为动态增加到已经存在的对象上。当装饰一个对象的时候,就表示独立与其他类实例对象,为该对象扩展了新的功能。 python的装饰器不是装...
  • zhangjunqis
  • zhangjunqis
  • 2017年09月03日 14:49
  • 253

Python @property装饰器

廖老师的博客链接如下,一开始没看懂,搜罗了一大堆,有点感觉了 点击打开链接 其实@property装饰器就是把class的方法变成属性,见下面这个class,它有两个私有属性。 通过第一个@...
  • sophie2805
  • sophie2805
  • 2015年06月14日 18:49
  • 623

Python笔记-装饰器@property、枚举类Enum

装饰器@property、枚举类Enum
  • qq_24885695
  • qq_24885695
  • 2017年04月14日 21:05
  • 238

浅谈Python装饰器

浅谈Python装饰器 By 马冬亮(凝霜  Loki) 一个人的战争(http://blog.csdn.net/MDL13412) 前置知识 一级对象 Python将一切视为 objec t的...
  • MDL13412
  • MDL13412
  • 2014年03月30日 22:07
  • 42168

python 常用装饰器

@property 对于类的方法, Python内置的@property装饰器就是负责把一个方法变成属性调用的...
  • flyDeDog
  • flyDeDog
  • 2017年03月31日 15:17
  • 470

Python——编写类装饰器

本文介绍了Python编写类装饰器的几个示例,包括,单体类、跟踪对象接口以及实现私有属性private...
  • ggGavin
  • ggGavin
  • 2016年03月18日 15:40
  • 10483

二.python 面试题装饰器

这是在Python学习小组上介绍的内容,现学现卖、多练习是好的学习方式。 第一步:最简单的函数,准备附加额外功能 1 2 3 4 5 6 7 8 # -*-...
  • beyond_f
  • beyond_f
  • 2017年07月06日 11:40
  • 419

Python 装饰器的典型使用场景(2)

Python 装饰器的典型使用场景(2)
  • qq_26886929
  • qq_26886929
  • 2017年01月07日 11:05
  • 1553

浅析python中@装饰器的作用

要了解python中@装饰器的作用,首先要记住这么几点: 1. 装饰器符号“@”属于语法糖,什么意思呢?就是说,我不按照@装饰器的语法要求来写,而是按照一般python的语法要求来写完全可以。那么用...
  • star714
  • star714
  • 2017年05月01日 10:56
  • 469
收藏助手
不良信息举报
您举报文章:笔记—python装饰器的用法
举报原因:
原因补充:

(最多只允许输入30个字)