二分法+装饰器(带返回值,无敌参数,批量执行/取消装饰器)

import time
flag = True
def timer_out(flag):
        def timer(f):
            def inner(*args,**kwargs):
                if flag:
                    start = time.time()
                    ret = f(*args,**kwargs)
                    print("耗时:%s"%(time.time() - start))
                    return ret
                else:
                    ret = f(*args, **kwargs)
                    return ret
            return inner
        return timer
@timer_out(flag)
def binary_search(iter_obj,search_data):
    high = len(iter_obj) - 1
    low = 0
    cnt = 1
    while low <= high:
        middle = (low+high) // 2
        print(f"{high},{middle},{low}")
        if iter_obj[middle] == search_data:
            return cnt
        elif iter_obj[middle] > search_data:
            high = middle - 1
        else:
            low = middle + 1
        cnt += 1
    else:
        return "no_match"


ret = binary_search(range(100),111)
print(ret)

@timer_out(flag)
def fun(iter_obj,s_data):
    cnt = 0
    for i in iter_obj:
        if i == s_data:
            return cnt
        cnt += 1
    else:
        return "no_match"
ret = fun(range(100),111111111)
print(ret)

  

原文地址:https://www.cnblogs.com/duoduoyichen/p/10558928.html