亚虎国际|顶尖娱乐平台

当前位置: 主页 > 装修案例 > 装修基础 >

亚虎国际娱乐Python 装饰器基础

时间:2017-10-09 13:19来源:未知 作者:海的罗卜 点击:
那什么场景下有需要利用decorator呢,设想模式中有一个模式也叫粉饰器。我们先简单回首一下设想模式中的粉饰器模式,简单的一句话概述 回到Python中来,用decorator语法实现粉饰器模式是很天然的,好比文中的示例代码,正在不改变被粉饰对象的同时添加了记实

  那什么场景下有需要利用decorator呢,设想模式中有一个模式也叫粉饰器。我们先简单回首一下设想模式中的粉饰器模式,简单的一句话概述

  回到Python中来,用decorator语法实现粉饰器模式是很天然的,好比文中的示例代码,正在不改变被粉饰对象的同时添加了记实函数施行时间的额外功能。当然,因为Python言语的矫捷性,decorator是能够点窜被粉饰的对象的(好比粉饰类的例子)。decorator正在python顶用途很是普遍,下面列举几个方面:

  代码中,函数log_cost_time就是一个粉饰器,其感化也很简单,打印被粉饰函数运转时间。

  粉饰器对类的润色也是很简单的,只不外日常平凡用得不是良多。举个例子,我们需要给点窜类的__str__方式,代码很简单。

  decorator的奇奥使用往往超出响应,经常正在各类源码中看到各类奇异的用法,酷壳这篇文章举的例子也不错。

  (4)框架代码,如flask, bottle等等,让利用者很便利就能利用框架,素质上也避免了反复代码。

  正在的代码(code snippet 0)中,把line12正文掉,然后把line18的正文去掉,是一样的结果。别的staticmethod和classmethod是两个我们经常正在代码顶用到的粉饰器,若是对pyc反编译,获得的代码一般也都是 func = staticmthod(func)这种模式。当然,符号的形式更受欢送些,至多能够少拼写一次函数名。

  一般来说,粉饰器是一个函数,接管一个函数(或者类)做为参数,前往值也是也是一个函数(或者类)。起首来看一个简单的例子:

  log_cost_time函数也接管一个参数,该参数用来指定消息的输出流,对于带参数的decorator

  (3)处置反复的逻辑,比若有N个函数都可能跑出非常,可是我们不关怀这些非常,只需不向挪用者传送非常就行了,这个时候能够写一个catchall的decorator,感化于所用可能跑出非常的函数

  因为粉饰器模式仅从外部改变组件,因而组件无需对它的粉饰有任何领会;也就是说,这些粉饰对该组件是通明的。

Copyright © 2012-2017 [亚虎国际娱乐] shikuai10 INC, All Rights Reserved