理解装饰器前,先要知道函数闭包python闭包

装饰器


对于装饰器通俗的理解,就是用来丰富函数功能的,根据业务的需求,可能某一函数被不同的A、B、C、D调用,但A、B需要添加更加丰富的功能,此时,就需要在A、B的调用处用修饰器修饰,增加业务需求的功能。

最简单的装饰器

## 装饰器
def dcorator(func):
    
    a = 10
    def wrapper(*args,**kwargs):
        print('此处使用了装饰器')
        func(*args,**kwargs)
        print('同时还可以使用装饰器中的变量:a= %d' % a)
        print('方法结束')
    return wrapper

@dcorator
def print_name(name:str):
    print('我的名字叫 %s' % name)

print_name('小明')

输出结果:

此处使用了装饰器
我的名字叫 小明
同时还可以使用装饰器中的变量:a= 10
方法结束

代码解读:
虽然最后一行看似调用了print_name方法,但是实际调用的是wrapper方法,装饰器丰富了函数的功能。

带参数的装饰器

其实是嵌套了三层的函数。

## 带参数的装饰器
def func_with_param(text:str):
    def dcorator(func):
        a = 10
        def APP(*args,**kwargs):
            print('这是一个修饰器参数:%s'% text)
            print('此处使用了装饰器')
            func(*args,**kwargs)
            print('同时还可以使用装饰器中的变量:a= %d' % a)
            print('方法结束')
        return APP
    return dcorator

@func_with_param('我是修饰器参数啊!')
def print_name(name:str):
    print('我的名字叫 %s' % name)

print_name('小明')

输出结果:

这是一个修饰器参数:我是修饰器参数啊!
此处使用了装饰器
我的名字叫 小明
同时还可以使用装饰器中的变量:a= 10
方法结束

至此,装饰器这个有点费解的特性也没什么神秘了。

装饰器这一语法体现了Python中函数是第一公民,函数是对象、是变量,可以作为参数、可以是返回值,非常的灵活与强大。