本文摘自php中文网,作者大家讲道理,侵删。
之前就了解到了装饰器, 但是就会点皮毛, 而且对其调用方式感到迷茫,正好现在的项目我想优化,就想到了用装饰器, 因此深入研究了下装饰器.
先看下代码:
1 2 3 4 5 6 7 8 | 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 的是一个函数名,按道理来讲,返回的就是一个函数地址啊!我理解有问题?随后上网查资料,又是闭包....但是我个人对它不感冒,随后自己分析,总结出了一段程序,看完你就知道原因了.
程序:
1 2 3 | # 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()()) # 调用无参数的嵌套函数...
|
这和我们的装饰器不像吗?这就是我们的装饰器!因此,我们可以按照上面的程序来理解,也就是说它是首先确定参数个数,随后分别传入的,下面,我们来改写代码:
1 2 3 4 5 | # 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' )
|


以上就是python 装饰器的详细内容,更多文章请关注木庄网络博客!!
相关阅读 >>
Python中浮点数的原理以及运算详解
Python中ljust什么意思
Python if else用法是什么?
Python怎么输出表格
详解Python中startswith()函数与endswith函数的使用方法
简要概括Python if多条件判断语句的特点
如何查找当前目录和文件目录
Python中怎么定义一个类
深入学习Python之魔法方法
如何在debian 9上安装Python 3.7?
更多相关阅读请进入《Python》频道 >>
人民邮电出版社
python入门书籍,非常畅销,超高好评,python官方公认好书。
转载请注明出处:木庄网络博客 » python 装饰器