关于python装饰器的详细介绍


本文摘自php中文网,作者V,侵删。

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

定义

(推荐教程:python教程)

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

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

详解

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

简单解释下闭包的特点:

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

1、函数对象;

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

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

举例:

1

2

3

4

5

6

#encoding=utf-8

import time

def now():

    print "current time is %s" %time.strftime("%Y-%m-%d %H-%M-%S")

res=now

res()

结果:

fcfec4bdd26d4fe04b373dfe9d0e3e3.png

现在如果我们想给now()函数增加一些别的功能,比如在调用该函数前后自动打印一些日志,但又不希望修改原now()的定义,这时候我们的装饰器就配上用场了。

本质上,decorator就是一个返回函数的高阶函数。所以我们需要定义一个能打印日志的的decorator

Python2.4以后,支持使用标识符@将装饰器应用到函数上,只需要在函数的定义前加上@和装饰器的名称即可

代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

#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()

结果:

8adc034015841583def5e2f979887d6.png

以上就是关于python装饰器的详细介绍的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

Python如何批量处理excel数据?

Python字节流怎么转化成图片

Python写的贪吃蛇游戏例子_Python

Python怎么画直线

Python有eval函数吗

Python如何爬取网页中js添加的内容 (代码)

Python中pow是什么

Python怎么导入模块

Python怎么求余数

Python中while,if,for语句的使用方法

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...