• 技术文章 >后端开发 >Python教程

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

    不言不言2018-12-30 10:57:36转载1349
    本篇文章给大家带来的内容是关于python装饰器是什么?怎么用?有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

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

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

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

    举一个小例子

    @func1
    def func2():
        pass

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

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

    #普通装饰器
    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函数的调用。

    装饰器的基本框架

    def func1(func):
        def func2():
    
            return func()
        return func1()

    进阶

    来一个带参数的装饰器吧

    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

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

    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装饰器是什么?怎么用?的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:segmentfault,如有侵犯,请联系admin@php.cn删除
    专题推荐:python装饰器
    上一篇:Python中hasattr(),getattr(),setattr()的用法介绍(代码示例) 下一篇:Python处理gif动态图的解析与合成操作的介绍
    千万级数据并发解决方案

    相关文章推荐

    • 对于Python装饰器使用的一些建议• python装饰器decorator介绍• Python装饰器入门学习教程(九步学习)• Python装饰器使用示例及实际应用例子• Python装饰器decorator的简单示例• Python装饰器之property用法详解• python装饰器的深入浅出
    1/1

    PHP中文网