个人理解,装饰器就是函数封装。如下代码,我们命名为代码1: 代码1 def say_hello_01(): print('我是固定输出的开始') print('我是动态输出Hello_01') print('我是固定输出的结束')def say_hello_02(): print('我是固定输出的开始') print('我是动态输出Hello_02') print('我是固定输出的结束')def say_hello_03(): print('我是固定输出的开始') print('我是动态输出Hello_03') print('我是固定输出的结束')say_hello_01()say_hello_02()say_hello_03() 我们发现,在以上输出中,第一个print的输出和第三个print的输出是固定的,只有中间有个动态输出在变。如果我要输出1000次的话,难道要把 print('我是固定输出的开始') 和 print('我是固定输出的结束') 写1000遍吗?怎么减少工作量? 思考:假如有一个函数固定执行 print('我是固定输出的开始') 和 print('我是固定输出的结束') ,另外一个函数动态执行 print('我是动态输出Hello_01') ,然后把他们凑合起来,就可以减少很多工作量 看以下代码:
假如我们能将动态函数01,动态函数02,动态函数03塞进固定函数中间,那就可以实现和代码1同样的效果,但工作量少了很多。怎么塞?如果给固定函数中间插一个参数,让参数帮忙占位置,而这个参数的输出恰好等于动态函数的输出,那不就可以实现代码1的效果吗? 改进代码: def 固定函数(我是参数): print('我是固定输出的开始') 我是参数() print('我是固定输出的结束')def 动态函数01(): print('我是动态输出Hello_01')def 动态函数02(): print('我是动态输出Hello_02')def 动态函数03(): print('我是动态输出Hello_03')a = 动态函数01b = 动态函数02c = 动态函数03固定函数(a)固定函数(b)固定函数(c) 通过对比发现这种写法的输出和代码1是一模一样的,但 print('我是固定输出的开始') 和 print('我是固定输出的结束') 这两行代码只写了一次,减少了大量重复的工作。 装饰器写法:
根据以上小案例,我们可以简单作如下理解: @后面的固定函数是一个毛坯房,而下面的函数则是用来装饰这个毛坯房的。你可以用各种家具把毛坯房装饰得更漂亮,但毛坯房的框架是不建议轻易动的。 以上就是我对python装饰器的理解,如理解有误,请多指正,不胜感激。 |
|
来自: 新用户0935snDB > 《待分类》