深入浅出理解python 装饰器
来源:互联网 发布:dnf盒子换装网络中断 编辑:程序博客网 时间:2024/05/22 13:30
之前就了解到了装饰器, 但是就会点皮毛, 而且对其调用方式感到迷茫,正好现在的项目我想优化,就想到了用装饰器, 因此深入研究了下装饰器.
先看下代码:
import time# 将函数作为参数传入到此方法....def timeif(func): def wrapper(arg): print("in wrapper() %s" % (arg)) start = time.clock() func(arg) end = time.clock() print("used: %s %s" % (end-start, arg)) return wrapper@timeifdef foo(arg): print("in foo() %s" % (arg))if __name__ == '__main__': foo(" Hello ") # 表示执行foo函数....
我的疑惑就是明明return 的是一个函数名,按道理来讲,返回的就是一个函数地址啊!我理解有问题?随后上网查资料,又是闭包....但是我个人对它不感冒,随后自己分析,总结出了一段程序,看完你就知道原因了.
程序:
# coding=utf-8# 带参数的函数 返回一个函数地址就行....def funX(x): def funY(): return x return funY# 不带参数的函数....def funX1(): print("调用函数funX1") def funY1(): print("调用函数funY1") return funY1if __name__ == '__main__': # print(funX(5)()) # 调用有参数的嵌套函数... print(funX1()()) # 调用无参数的嵌套函数...
这和我们的装饰器不像吗?这就是我们的装饰器!因此,我们可以按照上面的程序来理解,也就是说它是首先确定参数个数,随后分别传入的,下面,我们来改写代码:
# coding=utf-8import time# 将函数作为参数传入到此方法....def timeif(func): def wrapper(arg): print("in wrapper() %s" % (arg)) start = time.clock() func(arg) end = time.clock() print("used: %s %s" % (end-start, arg)) return wrapper# @timeifdef foo(arg): print("in foo() %s" % (arg))if __name__ == '__main__': timeif(foo)(' Hello')
阅读全文
0 0
- 深入浅出理解python 装饰器
- 深入浅出Python装饰器
- 深入浅出Python装饰器
- python装饰器理解
- 理解python装饰器
- python装饰器理解
- python装饰器理解
- 理解Python 装饰器
- 理解Python 装饰器
- 理解Python装饰器
- python 装饰器理解
- 【装饰器】理解Python中的装饰器
- 理解 Python 中的装饰器
- 理解Python中的装饰器
- 理解python中的装饰器
- 理解Python中的装饰器
- 理解Python中的装饰器
- 由浅入深理解Python装饰器
- 扩展thinkphp5的redis类方法
- H5移动端适配(flexible.js)
- 解决windos平台 adb dos 中文乱码
- 自定义圆形头像框二
- 区块链开发(二)基于以太坊的Mist 客户端安装
- 深入浅出理解python 装饰器
- CUDA均值滤波和中值滤波编程
- gitignore 文件
- 自定义上拉刷新下拉加载ScrollView
- XMind基础教程-主题篇
- java基础真题
- Mac下终端中自定义命令快捷键方法
- ng中在主页面弹出bootstrap的modal
- 初入Hibernate框架<三>