新聞中心
介紹
今天,我們將討論P(yáng)ython中的優(yōu)化技術(shù)。在本文中,您將了解如何通過避免在列表和字典中進(jìn)行重新計算來加快代碼的速度。

創(chuàng)新互聯(lián)是一家專業(yè)提供靖江企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計制作、網(wǎng)站設(shè)計、HTML5、小程序制作等業(yè)務(wù)。10年已為靖江眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計公司優(yōu)惠進(jìn)行中。
我們先編寫一個裝飾器函數(shù)來計算函數(shù)的執(zhí)行時間,方便測驗(yàn)不同代碼的速度:
- import functools
- import time
- def timeit(func):
- @functools.wraps(func)
- def newfunc(*args, **kwargs):
- startTime = time.time()
- func(*args, **kwargs)
- elapsedTime = time.time() - startTime
- print('function - {}, took {} ms to complete'.format(func.__name__, int(elapsedTime * 1000)))
- return newfunc
避免在列表中重新評估
在循環(huán)內(nèi)
代碼:
- @timeit
- def append_inside_loop(limit):
- nums = []
- for num in limit:
- nums.append(num)
- append_inside_loop(list(range(1, 9999999)))
在上面的函數(shù)中.append每次通過循環(huán)重新計算的函數(shù)引用。執(zhí)行后,上述函數(shù)所花費(fèi)的總時間:
- o/p - function - append_inside_loop, took 529 ms to complete
在循環(huán)外
代碼:
- @timeit
- def append_outside_loop(limit):
- nums = []
- append = nums.append
- for num in limit:
- append(num)
- append_outside_loop(list(range(1, 9999999)))
在上面的函數(shù)中,我們對nums.append在循環(huán)外部估值,并在循環(huán)內(nèi)部使用append為變量??倳r間:
- o/p - function - append_outside_loop, took 328 ms to complete
如您所見,當(dāng)我們在?for循環(huán)外部追加為一個本地變量,這將花費(fèi)更少的時間,可以將代碼加速201 ms。?
避免在字典中重新求值
在循環(huán)內(nèi)部
代碼:
- @timeit
- def inside_evaluation(limit):
- data = {}
- for num in limit:
- data[num] = data.get(num, 0) + 1
- inside_evaluation(list(range(1, 9999999)))
上述函數(shù)所花費(fèi)的總時間:
- o/p - function - inside_evaluation, took 1400 ms to complete
在循環(huán)外
代碼:
- @timeit
- def outside_evaluation(limit):
- data = {}
- get = data.get
- for num in limit:
- data[num] = get(num, 0) + 1
- outside_evaluation(list(range(1, 9999999)))
上述函數(shù)所花費(fèi)的總時間:
- o/p - function - outside_evaluation, took 1189 ms to complete
如你所見,我們這里的代碼速度提高了211毫秒。
新聞名稱:如何加速Python列表和字典讓你的代碼更加高效
網(wǎng)址分享:http://m.fisionsoft.com.cn/article/djpdghj.html


咨詢
建站咨詢
