理解Python装饰器(一)

python装饰器

装饰器是什么?我也不知道该如何给装饰器下定义。

1. 装饰器是函数,因为从代码的层面上来说,它就是开发人员定义的一个函数而已;
2. 装饰器就像是类的继承一样,通过装饰符,来实现函数与函数、函数与类之间的"继承"
3. 装饰器是种特殊的语法,通过 `@函数名` 或者 `@类名` 来实现函数或类的继承,但是
    装饰器不是继承,装饰器装饰的函数会被当做参数传递给装饰器,这个功能又好像
    C++中的虚函数,装饰器装饰的函数用来修改装饰器本身的功能来实现额外功能的添加。

示例:人与超人

前提:人 - 会走、会说话、会哭、会笑、会吃饭;超人 - 会走、会说、会哭、会笑、会吃饭、会飞

class man(object):
    def __init__(self, f):
        self.f = f
    def __call__(self):
        print("我会走路")
        print("我会说话")
        print("我会哭")
        print("我会笑")
        print("我会吃饭")
        self.f()

@man
def Super_man():
    print("我是超人,我会飞")

Super_man()

运行结果:

个人看法

装饰器可以用来解决上述例子中的一类问题:功能不清楚且会增加。只要定义好装饰器,
可以很好的实现代码的复用提高代码的可读性。所以,想要对装饰器有更加深入的理解,
一定要多思考,把编程中遇到的可以用装饰器解决的问题给解决掉;另一点就是要多看
别人的代码,在别人的代码中找到一些不一样的用法,然后思考为什么那么用,如果合
理就借鉴别人的思路和方法。

Python装饰器的用语、细节

这部分内容在网上可以直接搜到,不进行记录,参考文章中提到的文章均有此模块的介绍

参考文章

如何理解Python装饰器? - 知乎
简单 12 步理解 Python 装饰器 - 伯乐在线
Python装饰器简介 - Bruce Eckel
带有参数的Python装饰器 - Bruce Eckel

原文地址:http://blog.51cto.com/executer/2072246

时间: 2024-08-19 12:09:26

理解Python装饰器(一)的相关文章

理解 Python 装饰器看这一篇就够了

讲 Python 装饰器前,我想先举个例子,虽有点污,但跟装饰器这个话题很贴切. 每个人都有的内裤主要功能是用来遮羞,但是到了冬天它没法为我们防风御寒,咋办?我们想到的一个办法就是把内裤改造一下,让它变得更厚更长,这样一来,它不仅有遮羞功能,还能提供保暖,不过有个问题,这个内裤被我们改造成了长裤后,虽然还有遮羞功能,但本质上它不再是一条真正的内裤了.于是聪明的人们发明长裤,在不影响内裤的前提下,直接把长裤套在了内裤外面,这样内裤还是内裤,有了长裤后宝宝再也不冷了.装饰器就像我们这里说的长裤,在不

理解Python装饰器

装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓存.权限校验等场景.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用.概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能. 先来看一个简单例子: def foo(): print('i am foo') 现在有一个新的需求,希望可以记录下函数的执

如何理解python装饰器

如何理解装饰器python 学习遇到的第一个难点是装饰器.装饰器的作用是不大规模改动代码的情况下,增加功能.作用:为已经存在的对象添加额外的功能特点:不需要对对象做任何的代码上的变动.以一个例子来讲装饰器 import timedef timer(func): def deco(): start_time=time.time() func() stop_time=time.time() print("run time is %s"%(stop_time-start_time)) ret

关于python装饰器(Decorators)最底层理解的一句话

一个decorator只是一个带有一个函数作为参数并返回一个替换函数的闭包. http://www.xxx.com/html/2016/pythonhexinbiancheng_0718/1044.html 一步步教你理解Python装饰器 我作完了全部的测试.

Python装饰器详解,详细介绍它的应用场景

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

对Python装饰器的个人理解方法

0.说明 在自己好好总结并对Python装饰器的执行过程进行分解之前,对于装饰器虽然理解它的基本工作方式,但对于存在复杂参数的装饰器(装饰器和函数本身都有参数),总是会感到很模糊,即使这会弄懂了,下一次也很快忘记,其实本质上还是没有多花时间去搞懂其中的细节问题. 虽然网络上已经有很多这样的文章,但显然都是别人的思想,因此自己总是记不牢,所以花点时间自己好好整理一下. 最近在对<Python核心编程>做总结,收获了不少,下面分享一下我自己对于Python装饰器的理解,后面还提供了一个较为复杂的P

[Python]理解一下装饰器

在oop中需要通过继承来实现,而python除了通过继承来实现装饰模式外,直接在语法层次支持装饰器 下面通过一个简单的示例来理解一下Python的装饰器 这里我将设计一个log类,在编写代码的时候可能会遇到这样的问题,需要记录下所有的操作,这个需求该怎么实现呢? #python 装饰器 def log(text):     def decorator(func):         def wapper(*args):             print('%s %s:'%(text,func._

转发对python装饰器的理解

[Python] 对 Python 装饰器的理解的一些心得分享出来给大家参考 原文  http://blog.csdn.net/sxw3718401/article/details/39519587 主题 Python 最近写一个py脚本来整理电脑中的文档,其中需要检校输入的字符,为了不使代码冗长,想到使用装饰器. 上网搜索有关python的装饰器学习文档,主要看的是 AstralWind的一篇博文,以及Limodou的一篇文章.作为初学者,这两篇文章对新手有很大的帮助,但仍然有些不易理解的地方

python 装饰器、内部函数、闭包简单理解

python内部函数.闭包共同之处在于都是以函数作为参数传递到函数,不同之处在于返回与调用有所区别. 1.python内部函数 python内部函数示例: def test(*args): def add(*args): # 显示的调用外部函数的参数 return args return add(*args) # 返回内部函数的直接调用 运行结果如下: test(1,2,3) (1,2,3) 内部函数直接引用外部函数参数,外部函数test显示的返回内部函数add的调用.当需要在函数内部多次执行复