介绍今天,我们将讨论Python中的优化技术。在本文中,您将学习如何通过避免列表和字典中的重新计算来加速您的代码。我们先写一个装饰器函数来计算函数的执行时间,方便测试不同代码的速度:time.time()func(*args,**kwargs)elapsedTime=time.time()-startTimeprint('function-{},took{}mstocomplete'.format(func.__name__,int(elapsedTime*1000)))returnnewfuncavoidinlist重新计算循环内的代码:@timeitdefappend_inside_loop(limit):nums=[]fornuminlimit:nums.append(num)append_inside_loop(list(range(1,9999999)))在上面的function.append每次通过循环函数引用重新计算。执行后,上面函数总耗时:o/p-function-append_inside_loop,take529mstocomplete循环外代码:@timeitdefappend_outside_loop(limit):nums=[]append=nums.appendfornuminlimit:append(num)append_outside_loop(list(range(1,9999999)))在上面的函数中,我们在循环外评估nums.append并在循环内使用append作为变量。总时间:o/p-function-append_outside_loop,take328mstocomplete如您所见,当我们在for循环外追加一个局部变量时,这花费的时间少得多,使代码加速了201毫秒。避免在字典中重新求值循环内的代码:@timeitdefinside_evaluation(limit):data={}fornuminlimit:da??ta[num]=data.get(num,0)+1inside_evaluation(list(range(1,9999999)))上述函数花费的总时间:o/p-function-inside_evaluation,用了1400毫秒来完成循环外的代码:@timeitdefoutside_evaluation(limit):data={}get=data.getfornuminlimit:da??ta[num]=get(num,0)+1outside_evaluation(list(range(1,9999999)))上述函数耗时总计:o/p-function-outside_evaluation,耗时1189ms完成如你所见,我们这里的代码是211ms快点。
