给大家讲一个我的一个二逼大学同学的故事:
有一个函数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 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_decorate1 # here!!!!!!! def my_func(arg): print arg my_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)
他看了看,笑了笑,默默的回到了他的工位上,敲!代!码!!!!
如果看客们没懂,就看看我的这个二逼大学同学的一篇垃圾博客吧,或许会对你有些帮助,反正他的博客我已经无法直视了,欢迎吐槽
相关推荐
给Excel VBA 自定义函数添加说明
安徽大学复变函数与数理方法期末试卷及答案 本资源仅供个人学习使用,请勿商用
使用VB作为开发工具的朋友,应该都知道VB的IDE不支持对AciveDLL添加输出函数的方法.这样的DLL文件只能采用"引用"的办法来用.有没有办法让它像普通DLL一样拥有输出函数呢?请使用本程序吧!它能让你ActiveDLL内的函数...
python装饰器的4中类型:函数装饰函数、函数装饰类、类装饰函数、类装饰类的详细说明。
复变函数 第二版 是PDF后缀的哦,不可以实现复制等功能,如想实现功能请自己解决
大学数学 第八章第五节 隐函数的求导方法 一、一个方程所确定的隐函数 及其导数 二、方程组所确定的隐函数组 及其导数
复变函数参考答案(西安交通大学高等教学教研室版)
当程序使用“@函数”(比如函数 A)装饰另一个函数(比如函数 B)时,实际上完成如下两步: 1. 将被修饰的函数(函数 B)作为参数传给 @ 符号引用的函数(函数 A)。 2. 将函数 B 替换(装饰)成第 1 步的返回值。...
1.创建一个动态链接库,在该动态链接库中添加一个函数,该函数可以输出如图所示的图形; 2.在上面创建的动态链接库中添加导出类,并把绘制图形的函数添加到该类下; 3.创建一个动态链接库,在该动态链接库中添加一个...
在做一些开场动画或者其它指定事件触发 一类功能时,需要在编辑环境下设置添加回调函数。 一开始尝试直接使用delegate 来编写,测试发现没有效果,在谷歌搜索到Unity论坛有人提到 delegate 不能被序列化到Inspector...
华中科技大学《复变函数与积分变换》(第二版)课后答案
主要给大家介绍了关于C语言中二维数组作为函数参数来传递的三种方法,文中通过示例代码介绍的非常详细,对大家学习或者使用C语言有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
引言及第一章,第二章解析函数,第三章复变函数的积分。第四章级数,第五章留数,同步讲解
还有以下两个成员函数:一个用于初始化学生姓名、学号、性别和年龄的构造函数,一个用于输出学生信息的函数。编写一个主函数。声明一个学学生对象。然后调用成员函数在屏幕输出学生信息。 编程环境:vs2010,语言:...
用成员函数重载运算符“+”和“-”,将两个二维数组相加和相减。要求第一个二维数组的值由构造函数设置,另一个二维数组的值由键盘输入。
这对于使用华中科技大学复变函数教程的同学来说 或许有些用
吉林大学函数逼近理论的教学讲义
函数逼近:理论与数值方法.pdf 函数逼近:理论与数值方法.pdf
YOLOv5|YOLOv7|YOLOv8改各种IoU损失函数:YOLOv8涨点Trick,改进添加SIoU损失函数、EIoU损失函数、GIoU损失函数、α-IoU损失函数-CSDN博客.mhtml
北京邮电大学复变函数ppt课件(刘文军)全部讲义