全新升級的Python 3.1版本簡介
在新推出的Python 3.1版本中,我們用一組插件來實(shí)現(xiàn)一些具有統(tǒng)一接口的功能,我們使用Python來代替動態(tài)鏈接庫形式的插件,他的重點(diǎn)與我這一專欄的觀點(diǎn)有些相反,它提供了 Python 和 Lisp 之間非常好的常規(guī)比較。
同時在性能方面也有所改善。在上一篇中,我們?yōu)樽x者詳細(xì)介紹了Python 3.1版本在標(biāo)準(zhǔn)程序庫方面的變化,本文則要為讀者介紹新版本在性能方面的改善。在Python 3.1的開發(fā)計(jì)劃中,很大一部分都是關(guān)于性能的。
那么這一版本發(fā)布后,都是哪些性能得到改善呢?下面我們將一一加以介紹。Python 3.0曾以使用Python實(shí)現(xiàn)了一個新的I/O庫而引以為豪,但是其性能大家可想而知——和您估計(jì)的一樣,非常的低。
在Python 3.1版本中,人們利用C語言重新實(shí)現(xiàn)了此程序庫,所以它的性能得到了極大的提升,大概快了2到20倍。為此。我們寫了一段代碼:向一個文件中寫入5,000,000字節(jié)的內(nèi)容,連續(xù)寫入10次,然后計(jì)算其平均耗時。我們分別在Python 2.5、2.6、3.0和3.1下運(yùn)行該代碼,然后比較其結(jié)果。
看到這樣的結(jié)果,是不是既讓人感興趣又讓人很困惑呀:對于這個向文件逐字節(jié)寫入的基本I/O任務(wù),不同Python版本之間的性能差別是不是很明顯呢?Python 3.0的性能有了很大的下降。
這是可以理解的,原因前面已經(jīng)提過。不過,Python 2.6的性能比Python 2.5低了50%,而Python 3.1的性能有
幾乎是Python 2.5的兩倍。
從中我們可以了解到些什么呢?首先,對于該任務(wù)Python 3.0的性能是慘不忍睹的,它寫入字符的耗時是寫入字節(jié)的兩倍,并且?guī)缀醣?FONT size=+0>Python 3.1的性能地了二十倍。 Python 2.5、2.6和3.1所用的時間大體相當(dāng)。
從Python 2.x升級到Python 3.0的時候,Unicode的處理有了明顯的改善。以下程序?qū)σ粋€存放在緩沖區(qū)的1,000,000個希伯來語單詞“shalom”在UTF-8和UTF-16之間來回進(jìn)行編碼和解碼處理。此緩沖區(qū)總大小為五百萬字節(jié)。
- from __future__ import with_statement
 - import sys
 - import time
 - def test_encode_decode():
 - shalom = ' \u05dd\u05d5\u05dc\u05e9'
 - text = shalom * 1000000
 - start = time.time()
 - texttext_utf8 = text.encode('utf-8')
 - texttext_utf16 = text.encode('utf-16')
 - assert text_utf8.decode() == text
 - assert text_utf16.decode('utf-16') == text
 - end = time.time() - start
 - print (shalom, end)
 - return end
 - test = test_encode_decode
 - if __name__=='__main__':
 - times = [test() for i in range(10)]
 - times.remove(max(times))
 - times.remove(min(times))
 - print('Average:', sum(times) / len(times))
 
在Python 3.1版本下運(yùn)行此程序的時候,兩種的速度大體相當(dāng);然而,Python 3.0卻要快得多(大約快了5-6倍),而Python 3.1則要比Python 2.x快了近八倍,比Python 3.0快40%左右。
【編輯推薦】















 
 
 


 
 
 
 