`
yuanta11
  • 浏览: 60836 次
  • 性别: Icon_minigender_1
  • 来自: 淄博
社区版块
存档分类
最新评论

原来Python装饰器就是这么个东西

阅读更多

这是我自己的理解,如有不妥,请指正

其实弄明白了python中的嵌套函数(也就是所谓的闭合函数)之后,再想搞懂python装饰器就简单多了。

总之python装饰器不过就是一个针对嵌套函数的语法糖
它的作用就是在函数调用方法不变的情况下,把此函数包装成另一个函数来使用




一、首先来大致了解下嵌套函数:

被嵌套与一层函数中的二层函数可以记录上上一层函数作用域中的变量

举例:
def foo(a):
    def subfoo(b):
        return(b + a)
    return(subfoo)

f = foo('content') #由于foo返回的是subfoo,所以f是对subfoo的引用
f('sub_') #因为subfoo记录了foo的参数变量'content',所以返回值为'sub_content'




二、嵌套函数和它的变种(装饰器)

以下两端代码,作用是相同的,前一个是大姑娘,后一个是女扮男装后的大姑娘
def action(x):
    return(x)

def action_pro(n):
    def warpper(x):
        return(n(x) * x)
    return(warpper)

action = action_pro(action) #第一个action为自定义的伪装变量,第二个action为上边定义的action函数
action(3) #此函数实际为warpper(3),返回值为9

将上边代码改写:
def action_pro(n):
    def warpper(x):
        return(n(x) * x)
    return(warpper)

@action_pro #用action_pro函数把action包装成warpper
def action(x):
    return(x)

action(3) #此函数实际为warpper(3),返回值为9
分享到:
评论
1 楼 Mr_kong 2015-07-01  
赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞

相关推荐

    python使用装饰器作日志处理的方法

    装饰器这东西我看了一会儿才明白,在函数外面套了一层函数,感觉和java里的aop功能很像;写了2个装饰器日志的例子, 第一个是不带参数的装饰器用法示例,功能相当于给函数包了层异常处理,第二个是带参数的装饰器...

    12步教你理解Python装饰器

    通过下面的步骤让你由浅入深明白装饰器是什么。假定你拥有最基本的Python知识,本文阐述的东西可能对那些在工作中经常接触Python的人有很大的帮助。 1、函数(Functions) 在Python里,函数是用def关键字后跟一个...

    Python装饰器的函数式编程详解

    Python的装饰器的英文名叫Decorator,当你看到这个英文名的时候,你可能会把其跟Design Pattern里的Decorator搞混了,其实这是完全不同的两个东西。虽然好像,他们要干的事都很相似——都是想要对一个已有的模块做...

    12个步骤教你理解Python装饰器

    或许你已经用过装饰器,它的使用方式非常简单但理解起来困难(其实真正理解的也很简单),想要理解装饰器,你需要懂点函数式编程的概念,python函数的定义以及函数调用的语法规则等,虽然我没法把装饰器变得简单,...

    Python @函数装饰器及@staticmethod,@classmethod.docx

    使用 @ 符号引用已有的函数(比如 @staticmethod、@classmethod)后,可用于修饰其他函数,装饰被修饰的函数。...从上面介绍不难看出,被“@函数”修饰的函数不再是原来的函数,而是被替换成一个新的东西。

    简单说明Python中的装饰器的用法

    装饰器对与Python新手以至于熟悉Python的人都是一个难理解, 难写的东西. 那么今天就分享一下我对Python 装饰器的理解 所谓装饰器仅仅是一种语法糖, 可作用的对象可以是函数也可以是类, 装饰器本身是一个函数, 其主要...

    Python 3.7新功能之dataclass装饰器详解

    最激动人心的新功能之一是 dataclass 装饰器。 什么是 Data Class 大多数 Python 开发人员编写过很多像下面这样的类: class MyClass: def __init__(self, var_a, var_b): self.var_a = var_a self.var_b = var...

    python 装饰器的实际作用有哪些

    终于知道python的装饰器是怎么回事,那在工作中,到底能干吗用呢? 尤其对我这个只会写写脚本又不做python开发的小测试/手动无辜脸。 先说结论,肯定是有用处滴。 一、自动化测试中使用 就拿写的自动化测试来说吧,...

    py-decogres:Python PostgreSQL连接池装饰器

    装饰器因隐藏诸如全球状态之类的愚蠢事物而备受人群欢迎。 这个想法是为了能够轻松地调出您已经初始化的数据库池,并通过简单的界面继续使用与代码插入相同的池。 装饰器使您很容易看到函数接触了数据库,并且还暗示...

    python高级玩法,类的的基本概念和封包以及装饰器

    类的基本概念什么是类的封装的和隐藏,以及装饰器类的封装和隐藏类的装饰器@property,@name.setter 什么是类??? 类的基本概念 对于初学者也许会有一个类的概念或者并不太了解,那么由我在这里讲解一下。 类这种...

    python-patterns-收集了 Python 常用的设计模式-python

    客户端-提供商中间人以软化接口更改 复合允许客户端统一处理单个对象和组合 装饰器包装功能与其他功能以影响输出 外观使用一个类作为 许多其他享元的 API 透明地重用具有相似/相同状态的现有对象实例 front_...

    ​Python 之父的解析器系列之三:生成一个 PEG 解析器

    我已经在本系列@memoize装饰器,以实现packrat 解析。 上篇文章我们以一个手写的解析器结束。给语法加上一些限制的话,我们很容易从语法中自动生成这样的解析器。(我们稍后会解除那些限制。) 我们需要两个东西:一...

    pyorcy:支持在单个源文件中编写python模块和相应的cython模块的模块。 与cython纯python模式相反,对可以使用cython代码没有任何限制-python source file

    启动由函数装饰器触发的自动编译。 此机制类似于numba提供的机制。 因此,基本上,您可以使用python模式进行开发和调试。 当您对功能满意时,只需注释变量并添加装饰器即可自动生成和编译Cython代码。 简单的。 ...

    带标签_超详细笔记以及拓展延伸知识点总结_小甲鱼零基础入门学习python系列教程

    延:Python函数修饰符(装饰器)的使用 59 23讲:递归:这帮小兔崽子 62 24讲:递归:汉诺塔 63 17-24讲:阶段总结 64 25讲:字典:当索引值不好用时 65 26讲:字典:当索引值不好用时2 66 26延:你知道Python的字典是...

    pipey:python中管道的框架

    可以在pipey.Pipeable类中捕获pipey的全部功能,可以将其传递给函数以创建与Pipeable兼容的函数,或者用作围绕新函数的装饰器。 这两个功能如下所示。 pipey是灵活的,因此可以接受(几乎)任何东西作为输入。 因此...

    snoop:基于PySnooper的一组功能强大的Python调试工具

    您可能希望使用具有断点和监视功能的成熟调试器,但现在不必为设置一个调试器而烦恼。 您想知道哪些行正在运行,哪些不在,以及局部变量的值是什么。 大多数人会在战略位置使用print线,其中一些显示变量的值。 ...

    bwEdit-Python:用于编辑Bitwig文件的Python脚本

    -单击原子以查看其数据-单击一个原子的节点以开始连接,然后单击另一个原子的相应节点以完成连接-单击一个连接将其删除-拖动原子以使其移动变更日志变更日志v0.6.3: -添加了设备UI面板查看器-改变了一堆小东西我...

    trio-util:Python Trio asyncawait框架的实用程序库

    async_generator装饰器,可修改包含Trio构造的生成器以安全使用azip , azip_longest具有并行迭代的异步zip RepeatedEvent如果您确实要重用事件还有更多(...您可能不需要的晦涩的东西)! 有关详细信息,请参见。...

Global site tag (gtag.js) - Google Analytics