一.装饰器
装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有计时统计、插入日志、缓存计算结果、性能测试、事务处理等。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。
装饰器的作用和功能:
- 引入日志
- 函数执行时间统计
- 执行函数前预备处理
- 执行函数后的清理功能
- 权限校验等场景
- 缓存
下面举例说明
1.装饰器用做日志记录
1 | from functools import wrapper |
2.如何定义带参数的装饰器
1 | import functools |
3.装饰器用做执行时间统计
1 |
|
4.装饰器用做缓存
1 | def cache(func): |
二. __new__和__init__的区别
这个__new__确实很少见到,先做了解吧.
__new__是一个静态方法,而__init__是一个实例方法.__new__方法会返回一个创建的实例,而__init__什么都不返回.- 只有在
__new__返回一个cls的实例时后面的__init__才能被调用. - 当创建一个新实例时调用
__new__,初始化一个实例时用__init__.
三.单例模式
1.使用__new__方法
1 | class Singleton(object): |
2.装饰器版本
1 | def singleton(cls): |
3.import方法
作为python的模块是天然的单例模式
1 | # mysingleton.py |
4.使用元类
1 | class Singleton(type): |
四.Python中的作用域
Python 中,一个变量的作用域总是由在代码中被赋值的地方所决定的。
当 Python 遇到一个变量的话他会按照这样的顺序进行搜索:
本地作用域(Local)→当前作用域被嵌入的本地作用域(Enclosing locals)→全局/模块作用域(Global)→内置作用域(Built-in)