Python之Python高级特性3.0-装饰器

 

6.装饰器

(1)闭包:函数里面嵌套函数
(2)装饰器应用场景:在执行函数之前或之后做某种操作
(3)装饰器调用:Python的语法糖:@装饰器函数名,用于定义函数之前

(4)装饰器特性:闭包结构,返回值为函数

Python之Python高级特性3.0-装饰器_第1张图片

Python之Python高级特性3.0-装饰器_第2张图片

(5)装饰器嵌套:有多个装饰器时从下到上调用,从上到下执行

Python之Python高级特性3.0-装饰器_第3张图片

(6)装饰器参数:原装饰器外层再加一层函数,用来接收装饰器参数

Python之Python高级特性3.0-装饰器_第4张图片

(7)装饰器常用函数:

a. functools.wraps(函数名):防止被装饰函数属性被改变(fun.__name__,fun.__doc__)

Python之Python高级特性3.0-装饰器_第5张图片

 

Python之Python高级特性3.0-装饰器_第6张图片

Python之Python高级特性3.0-装饰器_第7张图片

Python之Python高级特性3.0-装饰器_第8张图片

 

b. inspect.getcallargs(函数名,可变参数,关键字参数):被装饰函数实参类型不定时自动封装成字典.key值:形参,value值:实参

Python之Python高级特性3.0-装饰器_第9张图片

Python之Python高级特性3.0-装饰器_第10张图片

 

(8)总结:装饰器模板

a. 

import functools

def #装饰器名称(fun):
    @functools.wraps(fun)
    def wrapper(*args, **kwargs):
        # 函数执行前的操作
        temp = fun(*args, **kwargs)
        # 函数执行后的操作
        return temp
    return wrapper

b.

import functools

def 装饰器名称(fun):
    @functools.wraps(fun)
    def wrapper(*args, **kwargs): 
        if #条件判断:
            temp = fun(*args, **kwargs)
            return temp
        else:
            #报错
    return wrapper

c.

import functools

def #装饰器名称(#装饰器参数):
    def inner(fun):
        @functools.wraps(fun)
        def wrapper(*args, **kwargs):
            # 函数执行前的操作
            temp = fun(*args, **kwargs)
            # 函数执行后的操作
            return temp
        return wrapper
    return inner

 

 

 

你可能感兴趣的:(Python之Python高级特性3.0-装饰器)