资讯专栏INFORMATION COLUMN

如何快速理解python装饰器

rockswang / 1570人阅读

摘要:快速理解装饰器,从名字可以大概看出,其作用可以概括为增强扩展函数功能。装饰器本质上就是以函数作为参数,能返回包含调用该参数函数及其他功能的新函数的一种函数。

快速理解

装饰器,从名字可以大概看出,其作用可以概括为: 增强(扩展)函数功能。

装饰器本质上就是: 以函数作为参数,能返回包含调用该参数函数及其他功能的新函数的一种函数。

装饰器通过在需要被装饰的函数的定义前一行添加@decorator_name的方式使用

举例说明 源函数
def hello():
    print("hello world!!!")
使用装饰器扩展hello()功能而不直接修改其定义
def log(func):
    """print function name before it"s called"""
    def wrapper(*args, **kw):  # 闭包,实现装饰器的基础
        print("call %s():
" % func.__name__, end="    ")
        return func(*args, **kw)  # 传递给wrapper的参数最后传递给了func
    return wrapper

@log
def hello():
    print("hello world!!!")

hello()

输出:

call hello():
    hello world!!!
将@log 放到hello()定义前一行,相当于执行以下过程
hello = log(hello)  # 此调用的执行效果等效于  log.func = hello, hello = log.wrapper
通过 @property 装饰器验证是否可以使用上述其等效方法替换正常修饰器的使用
class Student(object):
    # @property  # 作用是把类方法转换成类属性
    # def score(self):
    #     return self._score

    # 替换 @property的效果
    def score(self):
        return self._score
    score = property(score)

    @score.setter
    def score(self, value):
        if not isinstance(value, int):
            raise ValueError("score must be an integer!")
        if value < 0 or value > 100:
            raise ValueError("score must between 0 ~ 100!")
        self._score = value

a = Student()
a.score = 60
a.score

输出:

60

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42135.html

相关文章

  • Python】一文弄懂python装饰(附源码例子)

    摘要:装饰器的使用符合了面向对象编程的开放封闭原则。三简单的装饰器基于上面的函数执行时间的需求,我们就手写一个简单的装饰器进行实现。函数体就是要实现装饰器的内容。类装饰器的实现是调用了类里面的函数。类装饰器的写法比我们装饰器函数的写法更加简单。 目录 前言 一、什么是装饰器 二、为什么要用装饰器 ...

    liuchengxu 评论0 收藏0
  • 后端技术 - 收藏集 - 掘金

    摘要:理解迭代对象迭代器生成器后端掘金本文源自作者的一篇博文,原文是,俺写的这篇文章是按照自己的理解做的参考翻译。比较的是两个对象的内容是后端掘金黑魔法之协程异步后端掘金本文为作者原创,转载请先与作者联系。 完全理解关键字with与上下文管理器 - 掘金如果你有阅读源码的习惯,可能会看到一些优秀的代码经常出现带有 with 关键字的语句,它通常用在什么场景呢?今天就来说说 with 和 上下...

    oujie 评论0 收藏0
  • Python

    摘要:最近看前端都展开了几场而我大知乎最热语言还没有相关。有关书籍的介绍,大部分截取自是官方介绍。但从开始,标准库为我们提供了模块,它提供了和两个类,实现了对和的进一步抽象,对编写线程池进程池提供了直接的支持。 《流畅的python》阅读笔记 《流畅的python》是一本适合python进阶的书, 里面介绍的基本都是高级的python用法. 对于初学python的人来说, 基础大概也就够用了...

    dailybird 评论0 收藏0
  • 为什么离不开 Stackoverflow

    摘要:接下来手工实现了一个简单的装饰器原型,紧接着引入中的装饰器语法。最后还列出了一些装饰器的高级用法,包括给装饰器传递参数等。读完整个答案,一定能对装饰器有较深的理解,并且知道理解装饰器的思考过程。 作为一名程序员,如果没有听过 Stackoverflow,那么你最好去面壁思过一下。程序员最需要阅读的一本编程书籍(其实编程书留下这本就够了!): showImg(https://segmen...

    peixn 评论0 收藏0
  • 简单理解Python装饰

    摘要:下面我们一起抛去无关概念,简单地理解下的装饰器。用函数实现装饰器装饰器要求入参是函数对象,返回值是函数对象,嵌套函数完全能胜任。为了对调用方透明,装饰器返回的对象要伪装成被装饰的函数。 来源:http://www.lightxue.com/under...        Python有大量强大又贴心的特性,如果要列个最受欢迎排行榜,那么装饰器绝对会在其中。       刚接触装饰器,会...

    Meils 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<