装饰器

2018-06-10  本文已影响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())

上一篇下一篇

猜你喜欢

热点阅读