python学习9-装饰器和类型提升
2018-01-24 10:36
363 查看
一装饰器
参数是一个函数,返回值是一个函数,就可以作为装饰器.
常见的使用场景:监控、日志、缓存、路由、权限、参数检查、审计
1、类似如下:
2、带参数的装饰器类似如下:
二、类型提升
一个变量的类型,是在运行时决定的
一个变量的类型在应用的生命周期中是可变的
1、->int 只是注释,不检查,p3加入
三、常用
参数是一个函数,返回值是一个函数,就可以作为装饰器.
常见的使用场景:监控、日志、缓存、路由、权限、参数检查、审计
1、类似如下:
import functools def fn1(fn): @functools.wraps(fn) def wrap(*arg,**kw): print('start') ret = fn(*arg,**kw) print('stop') return ret return wrap @fn1 def fn2(x): print(x)
2、带参数的装饰器类似如下:
def logger(s,p=lambda name,t:print('call {} took {}'.format(name,t))): def _logger(fn): @functools.wraps(fn) def wrap(*arg,**kw): start = datetime.datetime.now() ret = fn(*arg,**kw) end = datetime.datetime.now() if (end - start).total_seconds() > s: p(fn.__name__,end-start) return ret return wrap return _logger @logger(2) def sleep(x): time.sleep(x)
二、类型提升
一个变量的类型,是在运行时决定的
一个变量的类型在应用的生命周期中是可变的
1、->int 只是注释,不检查,p3加入
def add(x,y)->int: return x + y
三、常用
import functools newadd = functools.partial(add,y=5) #设定函数默认值 @functools.lru_cache() #按参数缓存,默认为128条,按照最近最少使用替换,满足不需要过期、清除、分布式,无副作用即可使用
相关文章推荐
- Python3学习笔记-数据类型和变量
- Python学习笔记(一):基础语法、变量类型、运算符(快速入门篇)
- Python学习笔记(二):语句、数据类型(快速入门篇)
- Python学习笔记——装饰器
- Python3 学习第一弹:基本数据类型
- Python学习笔记 - 数据类型和变量
- Python新手学习基础之数据类型——字符串的切片截取
- Python学习笔记(四):动态类型
- python学习-Day5-python数据类型(一)
- Python学习一 Python对象类型
- python学习手册笔记--第5章--数字--第6章--动态类型
- python学习-Day15-python生成式和生成器、迭代器、装饰器
- 梳理Python基本认识基本类型,从零开始,学习Python
- 装饰器应用,Python模块学习之(__call__)实现准确计算函数运行时间
- 第八课 Python3 多线程学习-提升程序效率
- python学习笔记5.1-核心类型-集合set类型[转]
- Python学习笔记(12)-装饰器详解
- python学习笔记17(动态类型)
- python2.7学习笔记(二)List和Tuple类型
- 【转】Python装饰器学习