Python高级——多线程_11_装饰器

Python高级——多线程_11_装饰器

python核心编程2

流畅的python

 

1.闭包    

    特点:

    1.函数嵌套定义

    2.外部函数返回内部函数的引用

    3.内部函数可以使用外部函数提供的*变量/局部变量

    概念:

        内部函数 + *变量 构成的整体

 

    修改外部函数的参数

    python3:    

        nonlocal 修改外部函数的局部变量,只针对于不可变类型的数值

    python2:

        定义存储为列表后可修改

内部函数使用的*变量来自**__clours**

 

2.开闭原则

    对已经实现的代码进行关闭

    对已经实现的代码进行扩展是开放的<不修改代码>

    在不修改代码的情况下 对代码进行功能的扩展

 

3.装饰器

    装饰函数,基于闭包实现

    目的:不修改函数代码的情况下,对功能进行扩展

 

    特点:只接受一个函数参数 就是被装饰的函数的引用    传参使用 *args **kwargs

    形式上可以接收多个参数,但是装饰器只能接收一个函数

 

    装饰器函数分为:

    装饰器函数<基于闭包实现>;类装饰器<基于类实现>

    @ws

    def inner():

        pass

    @we ==  inner = ws(inner)

    

    应用场景:

    引入日志

    函数执行时间统计

    执行函数前预备处理

    执行函数后清理功能

    权限校验等场景

    缓存

 

    装饰器带参数

    @装饰器(age,)

    类装饰器 类实现的装饰器

    多个装饰器装饰同一个函数

 

判断一个对象是否可调用  如果:对象()  那么就是可调用对象

常用的可调用函数对象:    类 函数名    匿名函数    方法  实现了call方法的实例对象

callable(方法名)

__call__可以让对象变成可调用对象