分享

用听得懂的语言解释python装饰器—python学习笔记

 新用户0935snDB 2022-05-17 发布于河南

个人理解,装饰器就是函数封装。如下代码,我们命名为代码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()
文章图片1

我们发现,在以上输出中,第一个print的输出和第三个print的输出是固定的,只有中间有个动态输出在变。如果我要输出1000次的话,难道要把 print('我是固定输出的开始')print('我是固定输出的结束') 写1000遍吗?怎么减少工作量?

思考:假如有一个函数固定执行 print('我是固定输出的开始')print('我是固定输出的结束') ,另外一个函数动态执行 print('我是动态输出Hello_01') ,然后把他们凑合起来,就可以减少很多工作量

看以下代码:

def 固定函数():	print('我是固定输出的开始')	print('我是固定输出的结束')def 动态函数01():	print('我是动态输出Hello_01')def 动态函数02():	print('我是动态输出Hello_02')def 动态函数03():	print('我是动态输出Hello_03')固定函数()动态函数01()动态函数02()动态函数03()
文章图片2

假如我们能将动态函数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)
文章图片3

通过对比发现这种写法的输出和代码1是一模一样的,但 print('我是固定输出的开始')print('我是固定输出的结束') 这两行代码只写了一次,减少了大量重复的工作。

装饰器写法:

def 固定函数(我是参数):	print('我是固定输出的开始')	我是参数()	print('我是固定输出的结束')	@固定函数def 动态函数01():	print('我是动态输出Hello_01')	@固定函数def 动态函数02():	print('我是动态输出Hello_02')	@固定函数def 动态函数03():	print('我是动态输出Hello_03')
文章图片4

根据以上小案例,我们可以简单作如下理解:

文章图片5

@后面的固定函数是一个毛坯房,而下面的函数则是用来装饰这个毛坯房的。你可以用各种家具把毛坯房装饰得更漂亮,但毛坯房的框架是不建议轻易动的。

以上就是我对python装饰器的理解,如理解有误,请多指正,不胜感激。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多