首页 > 编程语言 > 详细

python3 装饰器应用举例

时间:2018-07-14 13:45:40      阅读:160      评论:0      收藏:0      [点我收藏+]

 

【引子】

  python 中的装饰器是oop(面向对象编程)设计模式、之装饰器模式的一个应用、由于有语法糖衣的缘故、所以写起来也更加方便

 

【从一个比较经典的应用场景来讲解装饰器】

  有过一定编程经历的工程师、应该都遇到过这样的场景。有一些老的API过时了但是在一段时间内它还是可用的,只是平台会把

  它标记为不推荐、也就是说这个API在新的版本里应该不会存在了。比如python-2.x 的时候有raw_input这个函数、但是到了  

  python-3.x的时候就没有了,在过渡时期平台通常会把将要过时的API标记成“过时”。它是怎么做到的呢?我觉得可行的方法

  有两个 1): 用工程师的“寿命”来代价 2): 用装饰器优雅的解决

 

【问题简介】

  1.1 假设你编写了一个非常牛逼的库、里面包含了一个非常牛逼的函数、它可以完成两个数相加。一开始你的代码是这样的

def add_fun(x,y):
    """
    实现两个数相加、并返回合
    """
    return x+y

  1.2 一段非常长的时间后、你的库在社区中大火、大家也都称你为大神;可是你突然发现了一个问题 add_fun 这个函数以“_fun”

  结尾真的够pythonic吗? 后来你还是决定把它改成add这样的函数名,可是有太多的程序依赖于你这个库的add_fun函数了,

  如果你突然把这个add_fun函数给改了,那些依赖于这个函数的程序由于再也找不到这个函数了,所以它们会报错,这个明显

  不是你想看到的;最后你还是决定单独增加一个add方法同时保留add_fun

def add_fun(x,y):
    """
    实现两个数相加、并返回合
    """
    return x+y

def add(x,y):
    """
    实现两个数相加、并返回合
    """
    return x+y   

  1.3 你开始为你这一个改动付出代价(网络上一时有无数人都在问你同一个问题),无数的人在问你为什么会有两上功能完全一样的函数?

  于是你把这个问题加到了FQA列表、并且还在你的代码中明确的指出了“add_fun已经过时”

def add_fun(x,y):
    """
    实现两个数相加、并返回合
    """
    
    print("add_fun 函数已经过时")
    return x+y

def add(x,y):
    """
    实现两个数相加、并返回合
    """
    return x+y 

  1.4 问题是解决了,几天过你可能会发现自己掉粉了,多数人对你这种简单粗暴的方法表示了失望。 有来说一下你的改法有什么问题吧、

  1): 你给出函数没办法“封闭”,“封闭”是oop编程中的一个术语,指的你定义好的类、函数应该是功能上完备的,不应该再改了,想

  一下如果“场效应管”、“二极管”、“pn结” 这种基础元器件动不动就要改一下,这种感觉就像你是在对一个身在100楼的程序猿说,

  你好好上你的班、不过我要修一下大楼的地基。回到程序上来你用什么来保存你的改动不会引入新的bug ?

 

  2): 一个函数还好、如果你成千上万个?那么你这成千上万个都没有封闭、而且你工作量也不是一般的小。

 

 

 

  

 

【方法一:用寿命去解决问题】

 

 

 

 

 

 

 

-----

python3 装饰器应用举例

原文:https://www.cnblogs.com/JiangLe/p/9309330.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!