Python基础 —— 装饰器

理论

我们希望在不修改原函数的情况下,来对函数进行扩展。

示例1:

def begin_end(old):            # begin_end 就是 装饰器函数 
    
     # 创建一个新函数
    def new_function(*args , **kwargs):
        print('开始执行~~~~')    
        result = old(*args , **kwargs)
        print('执行结束~~~~')       
        return result
    
    return new_function


@begin_end         # 装饰器begin_end函数 对 add函数 进行扩展
def add(a , b):
    '''
        求任意两个数的和
    '''
    r = a + b
    return r
 
r=add(10 , 30)
print('求和:',r)

运行结果:

开始执行~~~
执行结束~~~
求和: 40

begin_end() 这种函数我们就称它为 装饰器

通过装饰器,可以在不修改原来函数的情况下来对函数进行扩展。
在定义函数时,可以通过 @ 装饰器,来使用指定的装饰器,来装饰当前的函数,
可以同时为一个函数指定多个装饰器,这样函数将会安装从内向外的顺序被装饰。

说明:

*args 表示接收所有的 位置参数;
**kwargs 表示接收所有的 键值参数 。

【函数的形参有两数:位置参数 和 键值参数】

示例2,使用多个装饰器

def fn3(old):
    
    # 创建一个新函数
    def new_function(*args , **kwargs):
        print('fn3装饰~开始执行~~~~')       
        result = old(*args , **kwargs)
        print('fn3装饰~执行结束~~~~')      
        return result
   
    return new_function

@fn3
@begin_end
def add(a , b):          # add上有两个装饰器去其进行扩展
    '''
        求任意两个数的和
    '''
    r = a + b
    return r
 
r=add(10 , 30)
print('求和:',r)

运行结果:

fn3装饰~开始执行~~~~
开始执行~~~~
执行结束~~~~
fn3装饰~执行结束~~~~
求和: 40

你可能感兴趣的:(python,python,装饰器)