装饰器

作者: 咏远瑞智 | 来源:发表于2018-06-10 20:57 被阅读0次

    装饰器属于python高级语法,吉多创始的装饰器也是很精妙,通常我们会把装饰器称作语法糖。就好比,一颗树原本只有树叶和枝叉。

    但是装上一些小饰品之后就变成了圣诞树。装饰器也是一样,他能给原本的函数添加一些功能,使函数在不改变原本代码的基础上具有不同的功能。

    装饰器装饰前的函数是由闭包参数func指向,而装饰后的函数指向闭包的内部函数。道德上装饰器,装饰完的函数,在执行的时候不会去更改原先函数的返回值。

    下面例举几个装饰器的例子:

    # 无参,无返回

    def set(func):

        def inner_set():

            print('添加功能')

            func()

        return inner_set

    @set

    def test():

        print(1)

    test()

    #  无参,有返回

    def set(func):

        def inner_set():

            print('添加功能')

            return func()

        return inner_set

    @set

    def test():

        return 1

    print(test())

    # 有参,无返回

    def set(func):

        def inner_set(*args, **kwargs):

            print('添加功能')

            func(*args, **kwargs)

        return inner_set

    @set

    #  相当于test = set(test)

    def test(*args, **kwargs):

        print('h', args)

        print('b', kwargs)

    test(1, 2, a=1, b=2)

    # 有参,有返回

    def set(func):

        def inner_set(*args, **kwargs):

            print('添加功能')

            return func(*args, **kwargs)

        return inner_set

    @set

    def test(*args, **kwargs):

        print(args)

        print(kwargs)

    test(1,2,a=3,b=4)

    #  万能装饰器

    def set(func):

        def inner_set(*args, **kwargs):

            print('添加功能')

            return func(*args, **kwargs)

        return inner_set

    @set

    def test(*args, **kwargs):

        print('test')

        return 100

    print(test())

    相关文章

      网友评论

          本文标题:装饰器

          本文链接:https://www.haomeiwen.com/subject/wtyqeftx.html