久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

    1. <style id="76ofp"></style>

      <style id="76ofp"></style>
      <rt id="76ofp"></rt>
      <form id="76ofp"><optgroup id="76ofp"></optgroup></form>
      1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

        手機(jī)站
        千鋒教育

        千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

        千鋒教育

        掃一掃進(jìn)入千鋒手機(jī)站

        領(lǐng)取全套視頻
        千鋒教育

        關(guān)注千鋒學(xué)習(xí)站小程序
        隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

        當(dāng)前位置:首頁  >  技術(shù)干貨  > 代碼優(yōu)化從哪些方面考慮?有什么想法?

        代碼優(yōu)化從哪些方面考慮?有什么想法?

        來源:千鋒教育
        發(fā)布人:wjy
        時(shí)間: 2022-09-13 17:43:23 1663062203

          1、優(yōu)化算法時(shí)間

          算法的時(shí)間復(fù)雜度對程序的執(zhí)行效率影響最大,在 Python 中可以通過選擇合適的數(shù)據(jù)結(jié)構(gòu)來優(yōu)化時(shí)間復(fù)雜度,如 list 和 set 查找某一個(gè)元素的時(shí)間復(fù)雜度分別是 O(n)和 O(1)。不同的場景有不同的優(yōu)化方式,總得來說,一般有分治,分支界限,貪心,動(dòng)態(tài)規(guī)劃等思想。

          2、循環(huán)優(yōu)化

          每種編程語言都會強(qiáng)調(diào)需要優(yōu)化循環(huán)。當(dāng)使用 Python 的時(shí)候,你可以依靠大量的技巧使得循環(huán)運(yùn)行得更快。然而,開發(fā)者經(jīng)常漏掉的一個(gè)方法是:

          避免在一個(gè)循環(huán)中使用點(diǎn)操作。每一次你調(diào)用方法 str.upper,Python 都會求該方法的值。然而,如果你用一個(gè)變量代替求得的值,值就變成了已知的,Python 就可以更快地執(zhí)行任務(wù)。優(yōu)化循環(huán)的關(guān)鍵,是要減少 Python 在循環(huán)內(nèi)部執(zhí)行的工作量,因?yàn)?Python 原生的解釋器在那種情況下,真的會減緩執(zhí)行的速度。(注意:優(yōu)化循環(huán)的方法有很多,這只是其中的一個(gè)。例如,許多程序員都會說,列表推導(dǎo)是在循環(huán)中提高執(zhí)行速度的最好方式。這里的關(guān)鍵是,優(yōu)化循環(huán)是程序取得更高的執(zhí)行速度的更好方式之一。)

          3、函數(shù)選擇

          在循環(huán)的時(shí)候使用 xrange 而不是 range;使用 xrange 可以節(jié)省大量的系統(tǒng)內(nèi)存,因?yàn)?xrange() 在序列中每次調(diào)用只產(chǎn)生一個(gè)整數(shù)元素。而 range()將直接返回完整的元素列表,用于循環(huán)時(shí)會有不必要的開銷。在 python3 中 xrange 不再存在,里面 range 提供一個(gè)可以遍歷任意長度的范圍的 iterator。

        代碼優(yōu)化從哪些方面考慮?有什么想法?

          4、并行編程

          因?yàn)?GIL 的存在,Python 很難充分利用多核 CPU 的優(yōu)勢。但是,可以通過內(nèi)置的模 multiprocessing 實(shí)現(xiàn)下面幾種并行模式:

          多進(jìn)程:對于 CPU 密集型的程序,可以使用 multiprocessing 的 Process,Pool 等封裝好的類,通過多進(jìn)程的方式實(shí)現(xiàn)并行計(jì)算。但是因?yàn)檫M(jìn)程中的通信成本比較大,對于進(jìn)程之間需要大量數(shù)據(jù)交互的程序效率未必有大的提高。

          多線程:對于 IO 密集型的程序,multiprocessing.dummy 模塊使用 multiprocessing 的接口封裝 threading,使得多線程編程也變得非常輕松(比如可以使用 Pool 的 map 接口,簡潔高效)。

          布式:multiprocessing 中的 Managers 類提供了可以在不同進(jìn)程之共享數(shù)據(jù)的方式,可以在此基礎(chǔ)上開發(fā)出分布式的程序。

          不同的業(yè)務(wù)場景可以選擇其中的一種或幾種的組合實(shí)現(xiàn)程序性能的優(yōu)化。

          5、使用性能分析工具

          除了上面在 ipython 使用到的 timeit 模塊,還有 cProfile。cProfile 的使用方式也非常簡單:python-mcProfilefilename.py,filename.py 是要運(yùn)行程序的文件名,可以在標(biāo)準(zhǔn)輸出中看到每一個(gè)函數(shù)被調(diào)用的次數(shù)和運(yùn)行的時(shí)間,從而找到程序的性能瓶頸,然后可以有針對性地優(yōu)化。

          6、set 的用法

          set 的 union,intersection,difference 操作要比 list 的迭代要快。因此如果涉及到求 list 交集,并集或者差的問題可以轉(zhuǎn)換為 set 來操作。

          7、PyPy

          PyPy 是用 RPython(CPython 的子集)實(shí)現(xiàn)的 Python,根據(jù)官網(wǎng)的基準(zhǔn)測試數(shù)據(jù),它比 CPython 實(shí)現(xiàn)的 Python 要快 6 倍以上??斓脑蚴鞘褂昧?Just-in-Time(JIT)編譯器,即動(dòng)態(tài)編譯器,與靜態(tài)編譯器(如 gcc,javac 等)不同,它是利用程序運(yùn)行的過程的數(shù)據(jù)進(jìn)行優(yōu)化。由于歷史原因,目前 pypy 中還保留著 GIL,不過正在進(jìn)行的 STM 項(xiàng)目試圖將 PyPy 變成沒有 GIL 的 Python。如果 python 程序中含有 C 擴(kuò)展(非 cffi 的方式),JIT 的優(yōu)化效果會大打折扣,甚至比 CPython 慢(比 Numpy)。

          所以在 PyPy 中最好用純 Python 或使用 cffi 擴(kuò)展。

        tags:
        聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
        10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
        請您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
        免費(fèi)領(lǐng)取
        今日已有369人領(lǐng)取成功
        劉同學(xué) 138****2860 剛剛成功領(lǐng)取
        王同學(xué) 131****2015 剛剛成功領(lǐng)取
        張同學(xué) 133****4652 剛剛成功領(lǐng)取
        李同學(xué) 135****8607 剛剛成功領(lǐng)取
        楊同學(xué) 132****5667 剛剛成功領(lǐng)取
        岳同學(xué) 134****6652 剛剛成功領(lǐng)取
        梁同學(xué) 157****2950 剛剛成功領(lǐng)取
        劉同學(xué) 189****1015 剛剛成功領(lǐng)取
        張同學(xué) 155****4678 剛剛成功領(lǐng)取
        鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
        董同學(xué) 138****2867 剛剛成功領(lǐng)取
        周同學(xué) 136****3602 剛剛成功領(lǐng)取
        相關(guān)推薦HOT
        軟件定制開發(fā)中的敏捷開發(fā)是什么?

        軟件定制開發(fā)中的敏捷開發(fā)是什么軟件定制開發(fā)中的敏捷開發(fā),從宏觀上看,是一個(gè)高度關(guān)注人員交互,持續(xù)開發(fā)與交付,接受需求變更并適應(yīng)環(huán)境變化...詳情>>

        2023-10-14 13:24:57
        什么是PlatformIo?

        PlatformIO是什么PlatformIO是一個(gè)全面的物聯(lián)網(wǎng)開發(fā)平臺,它為眾多硬件平臺和開發(fā)環(huán)境提供了統(tǒng)一的工作流程,有效簡化了開發(fā)過程,并能兼容各種...詳情>>

        2023-10-14 12:55:06
        云快照與自動(dòng)備份有什么區(qū)別?

        1、定義和目標(biāo)不同云快照的主要目標(biāo)是提供一種快速恢復(fù)數(shù)據(jù)的方法,它只記錄在快照時(shí)間點(diǎn)后的數(shù)據(jù)變化,而不是所有的數(shù)據(jù)。自動(dòng)備份的主要目標(biāo)...詳情>>

        2023-10-14 12:48:59
        服務(wù)器為什么要用Linux?

        服務(wù)器為什么要用Linux作為服務(wù)器操作系統(tǒng)的優(yōu)選,Linux在眾多選擇中脫穎而出。Linux作為服務(wù)器操作系統(tǒng)的優(yōu)選,有其獨(dú)特的優(yōu)勢和特點(diǎn)。包括其...詳情>>

        2023-10-14 12:34:11
        ORM解決的主要問題是什么?

        ORM(對象關(guān)系映射)解決的主要問題是將關(guān)系數(shù)據(jù)庫與面向?qū)ο缶幊讨g的映射困境。在傳統(tǒng)的關(guān)系數(shù)據(jù)庫中,數(shù)據(jù)以表格的形式存儲,而在面向?qū)ο?..詳情>>

        2023-10-14 12:26:19
        快速通道
        萝北县| 长岭县| 仪征市| 石城县| 伊春市| 庐江县| 岑巩县| 融水| 霍邱县| 肥西县| 盐城市| 石狮市| 阜宁县| 福泉市| 汪清县| 昌黎县| 安顺市| 东乡县| 阜康市| 博爱县| 太保市| 铜鼓县| 金溪县| 莲花县| 淮安市| 东丽区| 宁城县| 黄骅市| 辽中县| 台东市| 陆丰市| 卓资县| 潼南县| 康乐县| 阳城县| 鹤壁市| 香港 | 菏泽市| 乌鲁木齐县| 吉水县| 偏关县|