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

  

 

 

 

每天记录一个小知识。

posted @ 2021-06-07 11:33  rianley  阅读(907)  评论(0编辑  收藏  举报