摘要:快速理解装饰器,从名字可以大概看出,其作用可以概括为增强扩展函数功能。装饰器本质上就是以函数作为参数,能返回包含调用该参数函数及其他功能的新函数的一种函数。
快速理解
装饰器,从名字可以大概看出,其作用可以概括为: 增强(扩展)函数功能。
装饰器本质上就是: 以函数作为参数,能返回包含调用该参数函数及其他功能的新函数的一种函数。
装饰器通过在需要被装饰的函数的定义前一行添加@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
摘要:装饰器的使用符合了面向对象编程的开放封闭原则。三简单的装饰器基于上面的函数执行时间的需求,我们就手写一个简单的装饰器进行实现。函数体就是要实现装饰器的内容。类装饰器的实现是调用了类里面的函数。类装饰器的写法比我们装饰器函数的写法更加简单。 目录 前言 一、什么是装饰器 二、为什么要用装饰器 ...
摘要:理解迭代对象迭代器生成器后端掘金本文源自作者的一篇博文,原文是,俺写的这篇文章是按照自己的理解做的参考翻译。比较的是两个对象的内容是后端掘金黑魔法之协程异步后端掘金本文为作者原创,转载请先与作者联系。 完全理解关键字with与上下文管理器 - 掘金如果你有阅读源码的习惯,可能会看到一些优秀的代码经常出现带有 with 关键字的语句,它通常用在什么场景呢?今天就来说说 with 和 上下...
摘要:接下来手工实现了一个简单的装饰器原型,紧接着引入中的装饰器语法。最后还列出了一些装饰器的高级用法,包括给装饰器传递参数等。读完整个答案,一定能对装饰器有较深的理解,并且知道理解装饰器的思考过程。 作为一名程序员,如果没有听过 Stackoverflow,那么你最好去面壁思过一下。程序员最需要阅读的一本编程书籍(其实编程书留下这本就够了!): showImg(https://segmen...
摘要:下面我们一起抛去无关概念,简单地理解下的装饰器。用函数实现装饰器装饰器要求入参是函数对象,返回值是函数对象,嵌套函数完全能胜任。为了对调用方透明,装饰器返回的对象要伪装成被装饰的函数。 来源:http://www.lightxue.com/under... Python有大量强大又贴心的特性,如果要列个最受欢迎排行榜,那么装饰器绝对会在其中。 刚接触装饰器,会...
阅读 954·2023-04-25 23:54
阅读 3035·2021-11-08 13:21
阅读 3758·2021-09-27 13:35
阅读 3380·2021-07-26 23:41
阅读 1042·2019-08-30 15:52
阅读 3431·2019-08-30 11:27
阅读 2087·2019-08-29 18:37
阅读 528·2019-08-29 17:24