创新互联www.cdcxhl.cn八线动态BGP香港云服务器提供商,新人活动买多久送多久,划算不套路!
成都创新互联公司公司2013年成立,是专业互联网技术服务公司,拥有项目网站建设、成都做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元长岭做网站,已为上家服务,为长岭各地企业和个人服务,联系电话:13518219792本篇文章给大家分享的是有关什么是python装饰器,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
python装饰器就是用于拓展原来函数功能的一种函数,目的是在不改变原函数名(或类名)的情况下,给函数增加新的功能。装饰器本质上就是一个闭包,闭包是装饰器的核心。
定义
python装饰器(fuctional decorators)就是用于拓展原来函数功能的一种函数,目的是在不改变原函数名(或类名)的情况下,给函数增加新的功能。
这个函数的特殊之处在于它的返回值也是一个函数,这个函数是内嵌“原“”函数的函数。
详解
装饰器其实就是一个闭包,把一个函数当做参数后返回一个替代版函数,闭包是装饰器的核心。
简单解释下闭包的特点:
一个函数返回的函数对象,这个函数对象执行的话依赖非函数内部的变量值,这个时候,函数返回的实际内容如下:
1、函数对象;
2、函数对象需要使用的外部变量和变量值;
以上就是闭包,闭包必须嵌套在一个函数里,必须返回一个调用外部变量的函数对象,才是闭包。
举例:
#encoding=utf-8 import time def now(): print "current time is %s" %time.strftime("%Y-%m-%d %H-%M-%S") res=now res()
结果:
现在如果我们想给now()函数增加一些别的功能,比如在调用该函数前后自动打印一些日志,但又不希望修改原now()的定义,这时候我们的装饰器就配上用场了。
本质上,decorator就是一个返回函数的高阶函数。所以我们需要定义一个能打印日志的的decorator
Python2.4以后,支持使用标识符@将装饰器应用到函数上,只需要在函数的定义前加上@和装饰器的名称即可
代码:
#encoding=utf-8 import time #定义装饰器 def log(func): def wrapper(*args,**kw): print "call func is %s" %func.__name__ return func(*args,**kw) return wrapper @log def now(): now = time.strftime("%Y-%m-%d %H-%M-%S") print "current time is %s" %now now()
结果:
以上就是什么是python装饰器,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联-成都网站建设公司行业资讯频道。
分享名称:什么是python装饰器-创新互联
链接分享:http://lswzjz.com/article/hspch.html