• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搜讯息吧

关于python装饰器的详细介绍_Python教程,python,装饰器

Python ytg3114 3个月前 (07-08) 149次浏览 0个评论 扫描二维码

python是一种跨平台、开源、免费的高级动态编程语言,对么_Python教程

python是一种跨平台、开源、免费的高级动态编程语言,对。python具有简单、易学、速度快、免费、开源、可移植性、可扩展性、丰富的库等优点。python语言极其容易上手,它是一种代表简单主义思想的语言。

python装饰器就是用于拓展原来函数功能的一种函数,目的是在不改变原函数名(或类名)的情况下,给函数增加新的功能。装饰器本质上就是一个闭包,闭包是装饰器的核心。

关于python装饰器的详细介绍_Python教程,python,装饰器

定义

(推荐教程:python教程)

python装饰器(fuctional decorators)就是用于拓展原来函数功能的一种函数,目的是在不改变原函数名(或类名)的情况下,给函数增加新的功能。

这个函数的特殊之处在于它的返回值也是一个函数,这个函数是内嵌“原“”函数的函数。

详解

装饰器其实就是一个闭包,把一个函数当做参数后返回一个替代版函数,闭包是装饰器的核心。

简单解释下闭包的特点:

一个函数返回的函数对象,这个函数对象执行的话依赖非函数内部的变量值,这个时候,函数返回的实际内容如下:

1、函数对象;

可以搜Python题答案的APP有哪些?_Python教程

可以搜Python题答案的APP有:网课帮答题 、学小易 、助课宝、搜题宝 、微软数学 、Photomath、题多多 、作业帮、小猿搜题。

2、函数对象需要使用的外部变量和变量值;

以上就是闭包,闭包必须嵌套在一个函数里,必须返回一个调用外部变量的函数对象,才是闭包。

举例:

#encoding=utf-8
import time
def now():
    print "current time is %s" %time.strftime("%Y-%m-%d %H-%M-%S")
res=now
res()

结果:

关于python装饰器的详细介绍_Python教程,python,装饰器

现在如果我们想给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教程,python,装饰器

以上就是关于python装饰器的详细介绍的详细内容,更多请关注ki4网其它相关文章!

python如何另起一行?_Python教程

方法有三种,分别是:1、在需要另起一行的地方输入三个单引号(”’);2、在需要另起一行的地方输入三个双引号(”””);3、在需要另起一行的地方输入反斜杠(\)。


搜讯息 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于python装饰器的详细介绍_Python教程,python,装饰器
喜欢 (0)
[1353713598@qq.com]
分享 (0)
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址