面試題之有參裝飾器
在進行數據接口請求或者爬蟲執行任務之時;我們通常會受到網絡異常影響而出現的錯誤;而導致獲取數據失敗;
寫一個裝飾器;可以在出現異常錯誤的時候 停頓幾秒后重新請求;要求可控的試錯次數;可控的停頓時間;可控的錯誤類型
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
每天記錄一個小知識。
