python装饰器是什么?怎么用?


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

本篇文章给大家带来的内容是关于python装饰器是什么?怎么用?有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

在学习python过程中,相信大家对装饰器的概念很模糊,我也是困惑了很久,决定写一篇文章梳理一下。

首先要搞清楚什么是装饰器:

简单来说,可以把装饰器理解为一个包装函数的函数,在函数运行时增加功能但不影响这个函数原有内容,还可以进行函数执行后的清理工作。

举一个小例子

1

2

3

@func1

def func2():

    pass

装饰器做的事情就是func1(func2) 传递了一个函数对象到我们的装饰器里面然后先执行装饰器func1其中的内容,然后再执行函数func2

比如举一个普通装饰器的例子

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

#普通装饰器

def func1(func):

    def add_func():

        print('这是我要添加的功能')

        return func()

    return add_func

 

@func1

def func2():

    print('hello world')

 

#func1装饰器函数

#func2被装饰的函数

>>>func2()

这是我要添加的功能

hello world

在这段代码中func2()相当于func1(func2)()->add_func(),再想要执行func2()函数时,先执行装饰器func1()函数,并且参数func相当于func2()。执行func1函数时由于返回值是add_func,我们执行的是func1(func2)(),也就相当于执行add_func(),输出
'这是我添加的功能',返回一个func()函数,也就是参数func的调用,即对应的func2函数的调用。

装饰器的基本框架

1

2

3

4

5

def func1(func):

    def func2():

 

        return func()

    return func1()

进阶

来一个带参数的装饰器吧

1

2

3

4

5

6

7

8

9

10

11

12

13

14

def func1(func):

    def func2(a,b):

        a=1

        b=2

        return func(a,b)

    return func()

@func1

def func(x,y)

    print('this is a add func')

    print(x+y)

 

>>>func(10,20)

this is a add func

3

自这段代码中被装饰函数的参数传递到装饰函数的变量中,也就是x传递给了a,y传递给了breturn func(a,b)即调用了func函数并且函数的参数为ab

再高级一点的 装饰器函数带参数 (哈哈,是不是感觉有点懵了)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

def arg_func(arg):

    def _func(func):

        def _func1():

            if arg=='good':

                print('出去玩')

            if arg=='bad':

                print('不出去玩')

            return func()

        return _func1

    return _func

 

@arg_func('bad')

def func():

    print('bad day')

@arg_func('good')

def func1()

    print('good day')

 

>>>func()

不出去玩

bad day

>>>func1()

出去玩

good day

这段代码其实很简单,就是装饰器多了一个参数用来判断,看上去也很好理解。同样,执行func装饰器接收函数(arg_func)的参数是bad,执行func1函数,装饰器接收函数的参数是good

以上就是python装饰器是什么?怎么用?的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

Python怎么输出列表

Python闰年判定代码是什么

一张图带你了解Python

Python flask 多对多表查询的实例详解

Python中函数的全面总结(附实例)

Python程序怎么运行

Python的json怎么用

Python中append和extend区别是什么

巧妙解决Python多线程死锁问题

Python set是什么类型

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




打赏

取消

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

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

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

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

评论

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