博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【python】装饰器
阅读量:5066 次
发布时间:2019-06-12

本文共 1138 字,大约阅读时间需要 3 分钟。

装饰器模式定义:动态地给一个对象添加一些额外的职责。

比如一个函数或者接口,你不想修改它,又想添加一些额外的功能

def aaa ():     print("苹果,西瓜,火龙果") def bbb():     print("我今天买了:")     aaa() bbb() 在aaa()函数外面在加一层函数,添加功能 ------------------------------------------- 开始一个函数只打印“苹果,西瓜,火龙果” 我现在需要强调,“我今天买的”,就添加一个函数,打印 “我今天买了:”然后直接调用新定义的函数,就完成功能了。 这个例子简单所以有些多此一举,如果是一个1000多行的函数,或者 别人提供的无法更改的接口呢?就凸显出重要性了。

我今天买了:

苹果,西瓜,火龙果

------------------------------------------------------------------------------------------------

换一种写法:

def aaa ():     print("苹果,西瓜,火龙果") def bbb(x):     print("我今天买了:")     x() bbb(aaa) x代表参数,bbb函数调用的时候括号里面传入aaa,则在bbb函数里面x变成aaa,x()就变成aaa(),跟上面代码显示一样了。 装饰器闭包写法:
def aaa ():     print("苹果,西瓜,火龙果") def bbb(x):     def ccc():      print("我今天买了:")      x()     return ccc aaa=bbb(aaa)#如果注销的这句,就是调用aaa()函数打印出“苹果,西瓜,火龙果”,用其他变量也可以,比如:aa,cc,bb等, aaa() aa=bbb(aaa) aa()#效果跟用aaa字符一样。用aaa很容易跟aaa()函数搞混,且用这个条件后,aaa()函数就无法直接调用了,新手难以理解。 另外一种写法:
def bbb(x):     def ccc():      print("我今天买了:")      x()     return ccc @bbb def aaa ():     print("苹果,西瓜,火龙果") aaa()

先定义bbb,然后@bbb,下一行接着aaa()函数,节省了2行代码。格式顺序不能变

这里调用aaa(),就是打印修改后的内容,这就是所谓的装饰器。

转载于:https://www.cnblogs.com/yang30293316/p/11286404.html

你可能感兴趣的文章
Android快速实现二维码扫描--Zxing
查看>>
获取元素
查看>>
nginx+lighttpd+memcache+mysql配置与调试
查看>>
ubuntu12.04 启动apache2 对.htaccess 的支持
查看>>
proxy写监听方法,实现响应式
查看>>
前端工具----iconfont
查看>>
Azure Site Recovery 通过一键式流程将虚拟机故障转移至 Azure虚拟机
查看>>
Hello China操作系统STM32移植指南(一)
查看>>
cocos2dx CCEditBox
查看>>
VC++2012编程演练数据结构《8》回溯法解决迷宫问题
查看>>
第一阶段冲刺06
查看>>
WIN下修改host文件并立即生效
查看>>
十个免费的 Web 压力测试工具
查看>>
ckeditor 粘贴后去除html标签
查看>>
面试题
查看>>
51Nod:活动安排问题之二(贪心)
查看>>
EOS生产区块:解析插件producer_plugin
查看>>
数据库框架的log4j日志配置
查看>>
lintcode-easy-Remove Element
查看>>
Android 常用开源框架源码解析 系列 (四)Glide
查看>>