您的位置:首页 > 编程语言 > Python开发

python学习9-装饰器和类型提升

2018-01-24 10:36 363 查看
一装饰器
参数是一个函数,返回值是一个函数,就可以作为装饰器.
常见的使用场景:监控、日志、缓存、路由、权限、参数检查、审计
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条,按照最近最少使用替换,满足不需要过期、清除、分布式,无副作用即可使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  装饰器