首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

给函数平添装饰方法(一个二逼大学同学的故事)

2014-01-06 
给函数添加装饰方法(一个二逼大学同学的故事)给大家讲一个我的一个二逼大学同学的故事:?有一个函数func_a(

给函数添加装饰方法(一个二逼大学同学的故事)

给大家讲一个我的一个二逼大学同学的故事:

?

有一个函数func_a(arg),他有这么一种需求,想在该函数执行前和执行后加入处理逻辑,按照平常的思路他是这么进行设计的:

def func_a(arg):

??? ……

def func_b(arg):

??? …… # do something before

??? func_a(arg)

??? …… # do something after?

然后他在他的程序中需要用到func_b(arg)的地方都写上该函数的调用,并且他调用的地方很多,而有一天他的老板对他说:你的函数处理之前和处理之后的逻辑需要变更,为了应对新需求,他如此做:定义一个新的函数

def func_c(arg):

??? …… # do something before

??? func_a(arg)

??? …… # do something after?

之所以他没有直接在func_b上修改而是新建了一个func_c是因为func_b中的do something对他来说比较重要,他担心他老板明天让他把逻辑又还原回func_b,所以聪明的他对func_b进行了备份不更改,而是新建了func_c,可是问题来了,他不得不ctrl+f查找所有文件中的func_b,然后替换成func_c,可怜的是,调用func_b的地方很多,他自觉蛋疼无比,不得不带着烦躁的心一个接一个的替换,下班前他终于修改好了,信心满满的提交修改后的代码,可是第二天,fuck,他发现程序运行出错,原因是有个func_b忘了替换

,于是老板把他叫到办公室。。。

知道他的遭遇,我表示万分同情,于是我告诉他:你可以这么做,我给了他一个小示例:

def func_decorate1(func):    def check(arg):        print 'Before the function execution, you can do thing here(func_decorate1)'        func(arg)            print 'After the function execution, you can do thing here(func_decorate1)'    return checkdef func_decorate2(func):    def check(arg):        print 'Before the function execution, you can do thing here(func_decorate2)'        func(arg)            print 'After the function execution, you can do thing here(func_decorate2)'    return check@func_decorate1 # here!!!!!!!def my_func(arg):    print argmy_func('My function is being executed')

?运行结果是:

Before the function execution, you can do thing here(func_decorate1)
My function is being executed
After the function execution, you can do thing here(func_decorate1)

?

def func_decorate1(func):       def check(arg):           print 'Before the function execution, you can do thing here(func_decorate1)'          func(arg)               print 'After the function execution, you can do thing here(func_decorate1)'      return check     def func_decorate2(func):       def check(arg):           print 'Before the function execution, you can do thing here(func_decorate2)'          func(arg)               print 'After the function execution, you can do thing here(func_decorate2)'      return check     @func_decorate2 # here!!!!!!!   def my_func(arg):       print arg     my_func('My function is being executed')  

??

运行结果是:

Before the function execution, you can do thing here(func_decorate2)
My function is being executed
After the function execution, you can do thing here(func_decorate2)

?

他看了看,笑了笑,默默的回到了他的工位上,敲!代!码!!!!

?

如果看客们没懂,就看看我的这个二逼大学同学的一篇垃圾博客吧,或许会对你有些帮助,反正他的博客我已经无法直视了,欢迎吐槽

?http://blog.csdn.net/u011252084/article/details/14448179

热点排行