`
yuanta11
  • 浏览: 61447 次
  • 性别: 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-装饰器Decorators.pdf

    ### Python装饰器详解 #### 一、什么是装饰器? 装饰器是Python中一个非常重要的特性。简单来说,装饰器就是一个可以修改其他函数功能的函数。它们可以帮助我们编写更加简洁、可读性更强的代码,同时也使得代码...

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

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

    12步教你理解Python装饰器

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

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

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

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

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

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

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

    Python-关于Python中进行函数式编程的Awesome东西的列表

    - `functools`: 提供了一些高级函数,如`partial()`用于固定函数参数,`lru_cache()`实现LRU缓存策略,以及`wraps`装饰器用于函数装饰器。 - `itertools`: 提供了一系列高效且迭代器操作的函数,如`combinations()...

    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开发的小测试/手动无辜脸。 先说结论,肯定是有用处滴。 一、自动化测试中使用 就拿写的自动化测试来说吧,...

    FluentPython英文正式版(非提前版)

    书中引用了Python软件基金会成员Alex Martelli的评价,他称赞这本书是一本对于中高级Python程序员来说的“宝藏”,不仅能够帮助他们向精通之路迈进,还能让已经精通的人学到不少新东西。 总结来说,《流畅的Python...

    Intermediate_Python中文译本.pdf

    装饰器(Decorators)是Python中一个极为强大的特性,它们允许程序员以不改变原函数代码的前提下增加新功能。装饰器在诸如授权、日志记录等场景中非常有用。 在Python中,一切皆对象,意味着几乎所有东西都是对象类型...

    Python-intermediatePython如果你还是初学这书中有中高级程序员必须的好东西

    6. **装饰器和上下文管理器**:装饰器允许你在不修改原有代码的情况下,扩展或修改函数和类的功能。上下文管理器则用于资源的获取和释放,如文件操作,通过with语句实现更安全的管理。 7. **生成器与迭代器**:生成...

    一些 Python 方面的小东西【早年学习 Python 的玩具库,封存于此】.zip

    此外,也可能涉及了 Python 的一些高级特性,如类与对象(面向对象编程)、装饰器、上下文管理器、生成器、闭包等。如果作者在学习过程中接触了更深入的内容,那么文件中可能还包含了对文件操作、网络编程、数据库...

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

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

    byte of python3

    - **第9章:进阶主题**:涉及更高级的话题,如装饰器、生成器等。 #### 读者反馈 本书自出版以来收到了众多读者的高度评价: - **Walt Michalik**:这是我看过的最好的初学者教程!感谢作者的努力。 - **Joshua ...

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

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

    python类的学习资源包.zip

    在"好东西"这个文件中,可能包含了关于这些概念的教程、示例代码、练习题和解答,帮助你深入理解Python类的使用。通过阅读这些资料,你可以学习如何有效地设计和实现类,以及如何利用面向对象编程解决实际问题。 ...

    Fluent Python 高阶必备 英文版

    最后,本书探索了Python中的元编程概念,包括属性、属性描述符、类装饰器和元类。元编程允许程序员在运行时修改或者生成代码,是高级编程中非常强大的工具,但也需要谨慎使用。 Luciano Ramalho本人拥有超过20年的...

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

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

Global site tag (gtag.js) - Google Analytics