博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python装饰器
阅读量:6931 次
发布时间:2019-06-27

本文共 985 字,大约阅读时间需要 3 分钟。

实例场景:

  贵公司已经上线了一款产品,但是在发布后用户使用一段时间之后,发现产品可以做一下优化,已能达到更好的用户体验,作为开发人员的你该怎么做?

情景分析:

  1. 产品已经上线,不能轻易修改产品的代码
  2. 以最小的代价实现

实现过程分析:

  假设我们需要在产品的某些特定的函数中增加一些日志,用以在日志中记录代码在何时进入和离开该函数……

普通实现:

  可以在函数的开头与结尾处加上几行代码,用以记录的代码的进度:

def func1():    step1    step2    step3
def func1():    logger("Into func1")    step1    step2    step3    logger("Leave func1")

  分析:该种方式虽然能达到理想中的效果,但是涉及到修改了函数的源代码,一方面这样操作不安全(毕竟产品已经发布,针对代码的每一点修改都会给程序带来一定的风险),另一方面工作量比较大(假如有若干个函数都需要增加该功能……,假如增加的功能实现比较麻烦……)

装饰器方式实现

首先将需要新增加的功能定义为一个装饰器函数:

import timedef desc(func):    def warpper(*args, **kwargs):        logger("Into function %s at %s" % (func.__name__, time.time()))        func()        logger("Leave function %s at %s" % (func.__name__, time.time()))   return warpper

  可以在原有功能函数之前使用“@装饰器”的方式来为函数扩展功能:

@desc        def func1():    step1    step2    step3

这样就可以在执行原有函数的时候具有装饰器的功能,如以下例子:

 

根据以上,我们可以看到,装饰器有以下特点:

装饰器的本质函数,为其他函数增加附加功能。

装饰器的原则:

  • 不能修改被装饰函数的代码。
  • 不能修改被装饰函数的调用方式。

转载于:https://www.cnblogs.com/qianyeliange/p/8910928.html

你可能感兴趣的文章
sql server 2008学习9 视图
查看>>
单身职场人士怎么利用晚上时间提高自己?
查看>>
零碎的java知识点记录(一)
查看>>
探路者团队-贪吃蛇(测评人:刘耀泽)
查看>>
用户组和用户的实际应用模拟板
查看>>
无参方法声明实现及调用
查看>>
java反射例子
查看>>
cmd命令记录
查看>>
Bzoj3926 [Zjoi2015]诸神眷顾的幻想乡
查看>>
阿花宝宝 Java基础笔记 之 多态区分
查看>>
第八章.Spring MVC
查看>>
数据结构与算法面试题80道(36)
查看>>
uva10881 Piotr's Ants
查看>>
ngui点击与场景点击判断
查看>>
详解华为交换机iStack特性
查看>>
触觉反馈
查看>>
mongo shell启动配置文件.mongorc.js(一)
查看>>
solr缓存需要注意的问题
查看>>
python学习笔记-抓取网页图片脚本
查看>>
Microsoft Hyper-V Server 2012快速上手之前奏
查看>>