最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

六個竅門助你提高Python運行效率

 更新時間:2015年06月09日 09:20:22   投稿:junjie  
這篇文章主要介紹了六個竅門助你提高Python運行效率,本文講解了關(guān)鍵代碼使用外部功能包、在排序時使用鍵、針對循環(huán)的優(yōu)化、使用較新的Python版本等優(yōu)化竅門,需要的朋友可以參考下

不喜歡Python的人經(jīng)常會吐嘈Python運行太慢。但是,事實并非如此。嘗試以下六個竅門,來為你的Python應(yīng)用提速。

竅門一:關(guān)鍵代碼使用外部功能包

Python簡化了許多編程任務(wù),但是對于一些時間敏感的任務(wù),它的表現(xiàn)經(jīng)常不盡人意。使用C/C++或機器語言的外部功能包處理時間敏感任務(wù),可以有效提高應(yīng)用的運行效率。這些功能包往往依附于特定的平臺,因此你要根據(jù)自己所用的平臺選擇合適的功能包。簡而言之,這個竅門要你犧牲應(yīng)用的可移植性以換取只有通過對底層主機的直接編程才能獲得的運行效率。以下是一些你可以選擇用來提升效率的功能包:

Cython
Pylnlne
PyPy
Pyrex

這些功能包的用處各有不同。比如說,使用C語言的數(shù)據(jù)類型,可以使涉及內(nèi)存操作的任務(wù)更高效或者更直觀。Pyrex就能幫助Python延展出這樣的功能。Pylnline能使你在Python應(yīng)用中直接使用C代碼。內(nèi)聯(lián)代碼是獨立編譯的,但是它把所有編譯文件都保存在某處,并能充分利用C語言提供的高效率。

竅門二:在排序時使用鍵

Python含有許多古老的排序規(guī)則,這些規(guī)則在你創(chuàng)建定制的排序方法時會占用很多時間,而這些排序方法運行時也會拖延程序?qū)嶋H的運行速度。最佳的排序方法其實是盡可能多地使用鍵和內(nèi)置的sort()方法。譬如,拿下面的代碼來說:

復(fù)制代碼 代碼如下:

    import operator
    somelist = [(1, 5, 8), (6, 2, 4), (9, 7, 5)]
    somelist.sort(key=operator.itemgetter(0))
    somelist
    #Output = [(1, 5, 8), (6, 2, 4), (9, 7, 5)]
    somelist.sort(key=operator.itemgetter(1))
    somelist
    #Output = [(6, 2, 4), (1, 5, 8), (9, 7, 5)]
    somelist.sort(key=operator.itemgetter(2))
    somelist
    #Output = [(6, 2, 4), (9, 7, 5), (1, 5, 8)],

在每段例子里,list都是根據(jù)你選擇的用作關(guān)鍵參數(shù)的索引進行排序的。這個方法不僅對數(shù)值類型有效,還同樣適用于字符串類型。

竅門三:針對循環(huán)的優(yōu)化

每一種編程語言都強調(diào)最優(yōu)化的循環(huán)方案。當(dāng)使用Python時,你可以借助豐富的技巧讓循環(huán)程序跑得更快。然而,開發(fā)者們經(jīng)常遺忘的一個技巧是:盡量避免在循環(huán)中訪問變量的屬性。譬如,拿下面的代碼來說:

復(fù)制代碼 代碼如下:

    lowerlist = ['this', 'is', 'lowercase']
    upper = str.upper
    upperlist = []
    append = upperlist.append
    for word in lowerlist:
        append(upper(word))
        print(upperlist)
        #Output = ['THIS', 'IS', 'LOWERCASE']

每次你調(diào)用str.upper, Python都會計算這個式子的值。然而,如果你把這個求值賦值給一個變量,那么求值的結(jié)果就能提前知道,Python程序就能運行得更快。因此,關(guān)鍵就是盡可能減小Python在循環(huán)中的工作量。因為Python解釋執(zhí)行的特性,在上面的例子中會大大減慢它的速度。

(注意:優(yōu)化循環(huán)的方法還有很多,這只是其中之一。比如,很多程序員會認為,列表推導(dǎo)式是提高循環(huán)速度的最佳方法。關(guān)鍵在于,優(yōu)化循環(huán)方案是提高應(yīng)用程序運行速度的上佳選擇。)

竅門四:使用較新的Python版本

如果你在網(wǎng)上搜索Python,你會發(fā)現(xiàn)數(shù)不盡的信息都是關(guān)于如何升級Python版本。通常,每個版本的Python都會包含優(yōu)化內(nèi)容,使其運行速度優(yōu)于之前的版本。但是,限制因素在于,你最喜歡的函數(shù)庫有沒有同步更新支持新的Python版本。與其爭論函數(shù)庫是否應(yīng)該更新,關(guān)鍵在于新的Python版本是否足夠高效來支持這一更新。

你要保證自己的代碼在新版本里還能運行。你需要使用新的函數(shù)庫才能體驗新的Python版本,然后你需要在做出關(guān)鍵性的改動時檢查自己的應(yīng)用。只有當(dāng)你完成必要的修正之后,你才能體會新版本的不同。

然而,如果你只是確保自己的應(yīng)用在新版本中可以運行,你很可能會錯過新版本提供的新特性。一旦你決定更新,請分析你的應(yīng)用在新版本下的表現(xiàn),并檢查可能出問題的部分,然后優(yōu)先針對這些部分應(yīng)用新版本的特性。只有這樣,用戶才能在更新之初就覺察到應(yīng)用性能的改觀。

竅門五:嘗試多種編碼方法

每次創(chuàng)建應(yīng)用時都使用同一種編碼方法幾乎無一例外會導(dǎo)致應(yīng)用的運行效率不盡人意??梢栽诔绦蚍治鰰r嘗試一些試驗性的辦法。譬如說,在處理字典中的數(shù)據(jù)項時,你既可以使用安全的方法,先確保數(shù)據(jù)項已經(jīng)存在再進行更新,也可以直接對數(shù)據(jù)項進行更新,把不存在的數(shù)據(jù)項作為特例分開處理。請看下面第一段代碼:

復(fù)制代碼 代碼如下:

   n = 16
    myDict = {}
    for i in range(0, n):
        char = 'abcd'[i%4]
        if char not in myDict:
            myDict[char] = 0
            myDict[char] += 1
            print(myDict)

當(dāng)一開始myDict為空時,這段代碼會跑得比較快。然而,通常情況下,myDict填滿了數(shù)據(jù),至少填有大部分數(shù)據(jù),這時換另一種方法會更有效率。

復(fù)制代碼 代碼如下:

    n = 16
    myDict = {}
    for i in range(0, n):
        char = 'abcd'[i%4]
        try:
            myDict[char] += 1
        except KeyError:
            myDict[char] = 1
        print(myDict)

在兩種方法中輸出結(jié)果都是一樣的。區(qū)別在于輸出是如何獲得的。跳出常規(guī)的思維模式,創(chuàng)建新的編程技巧能使你的應(yīng)用更有效率。

竅門六:交叉編譯你的應(yīng)用

開發(fā)者有時會忘記計算機其實并不理解用來創(chuàng)建現(xiàn)代應(yīng)用程序的編程語言。計算機理解的是機器語言。為了運行你的應(yīng)用,你借助一個應(yīng)用將你所編的人類可讀的代碼轉(zhuǎn)換成機器可讀的代碼。有時,你用一種諸如Python這樣的語言編寫應(yīng)用,再以C++這樣的語言運行你的應(yīng)用,這在運行的角度來說,是可行的。關(guān)鍵在于,你想你的應(yīng)用完成什么事情,而你的主機系統(tǒng)能提供什么樣的資源。

Nuitka是一款有趣的交叉編譯器,能將你的Python代碼轉(zhuǎn)化成C++代碼。這樣,你就可以在native模式下執(zhí)行自己的應(yīng)用,而無需依賴于解釋器程序。你會發(fā)現(xiàn)自己的應(yīng)用運行效率有了較大的提高,但是這會因平臺和任務(wù)的差異而有所不同。

(注意:Nuitka現(xiàn)在還處在測試階段,所以在實際應(yīng)用中請多加注意。實際上,當(dāng)下最好還是把它用于實驗。此外,關(guān)于交叉編譯是否為提高運行效率的最佳方法還存在討論的空間。開發(fā)者已經(jīng)使用交叉編譯多年,用來提高應(yīng)用的速度。記住,每一種解決辦法都有利有弊,在把它用于生產(chǎn)環(huán)境之前請仔細權(quán)衡。)

在使用交叉編譯器時,記得確保它支持你所用的Python版本。Nuitka支持Python2.6, 2.7, 3.2和3.3。為了讓解決方案生效,你需要一個Python解釋器和一個C++編譯器。Nuitka支持許多C++編譯器,其中包括Microsoft Visual Studio, MinGW Clang/LLVM

交叉編譯可能造成一些嚴重問題。比如,在使用Nuitka時,你會發(fā)現(xiàn)即便是一個小程序也會消耗巨大的驅(qū)動空間。因為Nuitka借助一系列的動態(tài)鏈接庫(DDLs)來執(zhí)行Python的功能。因此,如果你用的是一個資源很有限的系統(tǒng),這種方法或許不太可行。

結(jié)論

前文所述的六個竅門都能幫助你創(chuàng)建運行更有效率的Python應(yīng)用。但是銀彈是不存在的。上述的這些竅門不一定每次都能奏效。在特定的Python的版本下,有的竅門或許比其他的表現(xiàn)更好,但這有時候甚至取決于平臺的差異。你需要總結(jié)分析你的應(yīng)用,找到它效率低下的部分,然后嘗試這些竅門,找到解決問題的最佳方法。

相關(guān)文章

  • Python+Sklearn實現(xiàn)異常檢測

    Python+Sklearn實現(xiàn)異常檢測

    這篇文章主要為大家詳細介紹了Python如何利用Sklearn實現(xiàn)異常檢測,文中的示例代碼講解詳細,對我們學(xué)習(xí)Python有一定的幫助,感興趣的可以跟隨小編一起學(xué)習(xí)一下
    2022-12-12
  • Python實現(xiàn)提取給定網(wǎng)頁內(nèi)的所有鏈接

    Python實現(xiàn)提取給定網(wǎng)頁內(nèi)的所有鏈接

    這篇文章主要和大家分享一個實用的Python腳本,可以實現(xiàn)從給定的網(wǎng)頁中檢索所有鏈接,并將其保存為txt文件,需要的小伙伴可以收藏一下
    2023-05-05
  • Python中__new__和__init__的區(qū)別與聯(lián)系

    Python中__new__和__init__的區(qū)別與聯(lián)系

    這篇文章主要介紹了Python中__new__和__init__的區(qū)別與聯(lián)系,需要的朋友可以參考下
    2021-05-05
  • Python如何實現(xiàn)MySQL實例初始化詳解

    Python如何實現(xiàn)MySQL實例初始化詳解

    這篇文章主要給大家介紹了關(guān)于Python如何實現(xiàn)MySQL實例初始化的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • 跟老齊學(xué)Python之賦值,簡單也不簡單

    跟老齊學(xué)Python之賦值,簡單也不簡單

    在《初識永遠強大的函數(shù)》一文中,有一節(jié)專門討論“取名字的學(xué)問”,就是有關(guān)變量名稱的問題,本溫故而知新的原則,這里要復(fù)習(xí)一下
    2014-09-09
  • python flask實現(xiàn)分頁的示例代碼

    python flask實現(xiàn)分頁的示例代碼

    這篇文章主要介紹了python flask實現(xiàn)分頁的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • Python發(fā)送郵件功能示例【使用QQ郵箱】

    Python發(fā)送郵件功能示例【使用QQ郵箱】

    這篇文章主要介紹了Python發(fā)送郵件功能,結(jié)合實例形式分析了Python使用QQ郵箱進行郵件發(fā)送的相關(guān)設(shè)置與使用技巧,需要的朋友可以參考下
    2018-12-12
  • Python實現(xiàn)粒子群算法的示例

    Python實現(xiàn)粒子群算法的示例

    這篇文章主要介紹了Python實現(xiàn)粒子群算法的示例,幫助大家更好的理解和使用Python,感興趣的朋友可以了解下
    2021-02-02
  • Python操作Elasticsearch詳細指南

    Python操作Elasticsearch詳細指南

    Elasticsearch?是一種強大且靈活的分布式搜索引擎,而?Python?則以其易用性和強大的數(shù)據(jù)處理能力,成為開發(fā)者在數(shù)據(jù)操作中的理想選擇,下面我們就來看看如何使用Python操作Elasticsearch吧
    2025-02-02
  • PyTorch如何創(chuàng)建自己的數(shù)據(jù)集

    PyTorch如何創(chuàng)建自己的數(shù)據(jù)集

    這篇文章主要介紹了PyTorch如何創(chuàng)建自己的數(shù)據(jù)集,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評論

兰西县| 日照市| 鄂伦春自治旗| 项城市| 黔江区| 永兴县| 夹江县| 会昌县| 北安市| 惠州市| 云安县| 灯塔市| 崇义县| 定边县| 海南省| 名山县| 都昌县| 南部县| 健康| 昌乐县| 永嘉县| 五河县| 富平县| 鄢陵县| 襄垣县| 新巴尔虎右旗| 环江| 红原县| 灵丘县| 高密市| 德惠市| 永顺县| 荣成市| 嫩江县| 友谊县| 天津市| 博乐市| 麻江县| 乡城县| 宁夏| 双峰县|