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

  

 

 

 

每天記錄一個小知識。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM