zoukankan      html  css  js  c++  java
  • 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
    

      

    每天记录一个小知识。

  • 相关阅读:
    一生要做的99件事
    Flash 简单的Mouse.hide()
    [转]FCKeditor
    [转]pv是什么意思?什么是pv值,pv访问量?网站pv是什么?
    CSS:用DIV+CSS实现表格形式的数据排列
    css "Float"
    Jemin的div+css测试文件
    原来
    我终于知道什么情况下得用table了
    转的 关于div 的重叠
  • 原文地址:https://www.cnblogs.com/rianley/p/14858200.html
Copyright © 2011-2022 走看看