Python装饰器(面试题)
面试题之有参装饰器
在进行数据接口请求或者爬虫执行任务之时;我们通常会受到网络异常影响而出现的错误;而导致获取数据失败;
写一个装饰器;可以在出现异常错误的时候 停顿几秒后重新请求;要求可控的试错次数;可控的停顿时间;可控的错误类型
def re_request(*,request_time=3,max_wait_secs=3,errors=(Exception, )): ''' @request_time: 重试指定的次数; @max_wait_secs: 每次错误后停顿多少秒 @errors : 错误类型 ''' def decorate(func): @wraps(func) def wrapper(*args,**kwargs): for _ in range(request_time): try: return func(*args,**kwargs) except errors: print('休眠几秒;在此尝试') sleep(random()*max_wait_secs) return None return wrapper return decorate
单例模式是指让一个类只能创建出唯一的实例,这个题目在面试中出现的频率极高,因为它考察的不仅仅是单例模式,更是对Python语言到底掌握到何种程度;请使用装饰器来实现一个单例
from functools import wraps def singleton(cls): """单例类装饰器""" instances = {} @wraps(cls) def wrapper(*args, **kwargs): if cls not in instances: instances[cls] = cls(*args, **kwargs) return instances[cls] return wrapper @singleton class President: pass
每天记录一个小知识。