最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
加快Python運(yùn)行時(shí)速度的技巧有哪些

本篇內(nèi)容介紹了“加快Python運(yùn)行時(shí)速度的技巧有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

在綿陽等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供做網(wǎng)站、成都網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作定制網(wǎng)站建設(shè),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都全網(wǎng)營(yíng)銷,成都外貿(mào)網(wǎng)站建設(shè),綿陽網(wǎng)站建設(shè)費(fèi)用合理。

0.優(yōu)化原理

在深入探討代碼優(yōu)化的細(xì)節(jié)之前,我們需要了解一些代碼優(yōu)化的基本原理。

  • 確保代碼可以首先正常工作。 因?yàn)榭焖僦谱髡_的程序要比制作快速的程序容易得多。

  • 權(quán)衡優(yōu)化成本。 優(yōu)化要付出代價(jià)。 例如,更少的運(yùn)行時(shí)通常需要更多的空間使用,或者更少的運(yùn)行時(shí)通常需要更多的運(yùn)行時(shí)間。

  • 優(yōu)化不能犧牲代碼的可讀性。

1. Python中正確的數(shù)據(jù)類型用法

1.1用set替換list以檢查元素是否在序列中

根據(jù)Python的時(shí)間復(fù)雜度,list的s操作中x的平均情況為O(n)。 另一方面,集合的s操作中x的平均情況為O(1)。

1.2使用defaultdict初始化字典

我們應(yīng)該使用defaultdict進(jìn)行初始化。

2.用生成器表達(dá)式替換列表推導(dǎo)

# Bad: 447ms nums_sum_list_comprehension = sum([num**2 for num in range(1000000)]) # Good: 300 msnums_sum_generator_expression = sum((num**2 for num in range(1000000)))

生成器表達(dá)式的另一個(gè)好處是,我們無需迭代就可以在不將整個(gè)列表對(duì)象構(gòu)建和保存在內(nèi)存中的情況下獲得結(jié)果。 換句話說,生成器表達(dá)式可以節(jié)省內(nèi)存使用量。

import sys # Badnums_squared_list = [num**2 for num in range(1000000)] print(sys.getsizeof(nums_squared_list))  # 87632 # Goodnums_squared_generator = (num**2 for num in range(1000000)) print(sys.getsizeof(nums_squared_generator))  # 128

3.用局部變量替換全局變量

我們應(yīng)該將全局變量放入函數(shù)中。 局部變量比全局變量快。

4.避免點(diǎn)操作

4.1避免函數(shù)訪問

每次我們使用。 要訪問該函數(shù),它將觸發(fā)特定的方法,例如__getattribute __()和__getattr __()。  這些方法將使用字典操作,這將導(dǎo)致時(shí)間成本。 我們可以使用從xx導(dǎo)入xx來消除此類費(fèi)用。

根據(jù)技術(shù)3,我們還可以將全局函數(shù)分配給局部函數(shù)。

此外,我們可以將list.append()方法分配給本地函數(shù)。

4.2避免類屬性訪問

訪問self._value的速度比訪問局部變量的速度慢。 我們可以將class屬性分配給局部變量以加快運(yùn)行時(shí)間。

5.避免不必要的抽象

當(dāng)使用其他處理層(例如裝飾器,屬性訪問,描述符)包裝代碼時(shí),這會(huì)使代碼變慢。 在大多數(shù)情況下,有必要重新考慮是否有必要使用這些層。 一些C / C  ++程序員可能會(huì)遵循使用getter / setter函數(shù)訪問屬性的編碼風(fēng)格。 但是我們可以使用更簡(jiǎn)單的寫作風(fēng)格。

6.避免數(shù)據(jù)重復(fù)

6.1避免無意義的數(shù)據(jù)復(fù)制

value_list是沒有意義的。

6.2更改值時(shí)避免使用temp變量

不需要臨時(shí)變量。

6.3連接字符串時(shí)用join()替換+

當(dāng)使用a + b連接字符串時(shí),Python將申請(qǐng)內(nèi)存空間,并將a和b分別復(fù)制到新應(yīng)用的內(nèi)存空間。 這是因?yàn)镻ython中的字符串?dāng)?shù)據(jù)類型是不可變的對(duì)象。  如果串聯(lián)n個(gè)字符串,它將生成n-1個(gè)中間結(jié)果,并且每個(gè)中間結(jié)果都將應(yīng)用于內(nèi)存空間并復(fù)制新的字符串。

另一方面,join()將節(jié)省時(shí)間。 它將首先計(jì)算需要應(yīng)用的總內(nèi)存空間,然后一次申請(qǐng)所需的內(nèi)存,然后將每個(gè)字符串元素復(fù)制到內(nèi)存中。

7.利用if語句的短路評(píng)估

Python使用短路技術(shù)來加快對(duì)真值的評(píng)估。 如果第一個(gè)語句為假,則整個(gè)事情必須為假,因此它將返回該值。  否則,如果第一個(gè)值為true,則檢查第二個(gè)值并返回該值。

因此,為了節(jié)省運(yùn)行時(shí)間,我們可以遵循以下規(guī)則:

  • if a and b:變量a應(yīng)該具有很高的False概率,因此Python不會(huì)計(jì)算b。

  • if a or b:變量a應(yīng)該具有較高的True概率,因此Python不會(huì)計(jì)算b。

8.循環(huán)優(yōu)化

8.1 for

for循環(huán)比while循環(huán)快。

8.2用隱式for循環(huán)替換顯式for循環(huán)

8.3減少內(nèi)部for循環(huán)的計(jì)算

我們將sqrt(x)從內(nèi)部for循環(huán)移動(dòng)到外部for循環(huán)。

9.使用numba.jit

Numba可以將Python函數(shù)JIT編譯為機(jī)器代碼以執(zhí)行,從而大大提高了代碼速度。 有關(guān)numba的更多信息,請(qǐng)參見主頁。

我們使用上面的示例。

我們將sqrt(x)從內(nèi)部for循環(huán)移動(dòng)到外部for循環(huán)。

10.使用cProfile查找時(shí)間成本函數(shù)

cProfile將輸出每個(gè)函數(shù)的時(shí)間使用情況。 因此我們可以找到時(shí)間成本函數(shù)。

“加快Python運(yùn)行時(shí)速度的技巧有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


網(wǎng)站欄目:加快Python運(yùn)行時(shí)速度的技巧有哪些
鏈接分享:http://fisionsoft.com.cn/article/pijdsd.html