本文目錄一覽:
- 1、Python 語言為什麼執行速度相當慢???不是一般的慢!!
- 2、python運行速度慢怎麼辦
- 3、Python 執行速度慢只是因為它是解釋型語言嗎
- 4、用python編程讀取TXT時,數據大概有1千萬條,速度很慢如何解決?
- 5、python list pop 速度很慢,有什麼 方法破解?
- 6、python為啥運行效率不高
Python 語言為什麼執行速度相當慢???不是一般的慢!!
java和c都是編譯型語言,一個是解釋型語言。
編譯型語言在程序執行之前,有一個單獨的編譯過程,將程序翻譯成機器語言,以後執行這個程序的時候,就不用再進行翻譯了。
解釋型語言,是在運行的時候將程序翻譯成機器語言,所以運行速度相對於編譯型語言要慢。
當然更多的是與演算法有關而不是語言。你python代碼換成這個看看,速度是不是比你快多了
def primes1(n):
“”” Returns a list of primes n “””
sieve = [True] * (n/2)
for i in xrange(3,int(n**0.5)+1,2):
if sieve[i/2]:
sieve[i*i/2::i] = [False] * ((n-i*i-1)/(2*i)+1)
return [2] + [2*i+1 for i in xrange(1,n/2) if sieve[i]]
import time
start = time.time()
a = primes1(4000000)
end = time.time()
print a
print ‘used time:’ end-start
python運行速度慢怎麼辦
yxhtest7772017-07-18
關注
分享
 697  2
python運行速度慢怎麼辦?6個Python性能優化技巧

Python是一門非常酷的語言,因為很少的Python代碼可以在短時間內做很多事情,並且,Python很容易就能支持多任務和多重處理。
Python的批評者聲稱Python性能低效、執行緩慢,但實際上並非如此:嘗試以下6個小技巧,可以加快Python應用程序。
關鍵代碼可以依賴於擴展包
Python使許多編程任務變得簡單,但是對於很關鍵的任務並不總是提供最好的性能。使用C、C++或者機器語言擴展包來執行關鍵任務能極大改善性能。這些包是依賴於平台的,也就是說,你必須使用特定的、與你使用的平台相關的包。簡而言之,該解決方案提供了一些應用程序的可移植性,以換取性能,您可以獲得只有通過直接向底層主機編程。
下面這些擴展包你可以考慮添加到你的個人擴展庫中:
Cython
PyInlne
PyPy
Pyrex
這些包有不同的作用和執行方式。例如,Pyrex 讓Python處理一些內存任務變得簡單高效;PyInline可以直接讓你在Python應用程序中使用C代碼,雖然內聯代碼被單獨編譯,但是如果你能高效的利用C代碼,它可以在同一個地方處理每一件事情。
使用關鍵字排序
有很多古老的Python代碼在執行時將花費額外的時間去創建一個自定義的排序函數。最好的排序方式是使用關鍵字和默認的sort()方法。
優化循環
每一種編程語言都強調循環語句的優化,Python也是一樣的。儘管你可以依賴於豐富的技術讓循環運行的更快,然而,開發者經常忽略的一個方法是避免在循環內部使用點拼接字元串。
使用新版本
任何一個在線上搜索Python資料的人都會發現無數關於Python版本遷移的信息。通常,Python每一個版本都針對之前的一個版本做了優化和改進,以讓Python運行的更快。限制因素是你喜歡的函數庫是否也針對Python的新版本做了改進。
當你使用了新的函數庫,獲得了Python的新版本,你需要保證代碼依然能夠運行,檢查應用,修正差異。然後,如果你僅僅是
Python 執行速度慢只是因為它是解釋型語言嗎
Python 不是解釋型語言,事實上也沒有「解釋型」語言這個分類。
Python 性能略有不佳的原因可能有幾個:
首先是 Python 希望自己是一個簡單和優雅的語言,需要性能的組件通常用 C 實現,沒有太多改進性能的動力。
然後 Python 具有垃圾回收和自動的內存管理功能,並且採用動態類型系統,會在運行時進行類型檢查,這會不可避免地略微影響性能,使其不如靜態類型(Java)或沒有垃圾回收(C/C++)的語言。
摘自維基百科:
「Python開發人員盡量避開不成熟或者不重要的優化。一些針對非重要部位的加快運行速度的補丁通常不會被合併到Python內。」
「因為Python屬於動態類型語言,動態類型語言是在運行期間檢查數據的類型,不得不保持描述變數值的實際類型標記,程序在每次操作變數時,需要執行數據依賴分支」
用python編程讀取TXT時,數據大概有1千萬條,速度很慢如何解決?
兩種可選的方式
1:使用yield的懶惰載入,示例代碼如下:
123456789101112
def read_in_chunks(file_object, chunk_size=1024): “””Lazy function (generator) to read a file piece by piece. Default chunk size: 1k.””” while True: data = file_object.read(chunk_size) if not data: break yield data f = open(‘really_big_file.dat’)for piece in read_in_chunks(f): process_data(piece)
2:使用iter和一個幫助方法:
123456
f = open(‘really_big_file.dat’)def read1k(): return f.read(1024) for piece in iter(read1k, ”): process_data(piece)
推薦使用第一個。
python list pop 速度很慢,有什麼 方法破解?
那就不要pop了,使用yield返回一個生成器,然後通過遍歷提取數據。
如果還是不行的話,c擴展也是一個,cython,都是不錯的解決方式。
另外,如果追求性能,其實就不推薦使用python了,使用c,c++試試。
如果解決了您的問題請採納!
如果未解決請繼續追問
python為啥運行效率不高
原因:1、python是動態語言;2、python是解釋執行,但是不支持JIT;3、python中一切都是對象,每個對象都需要維護引用計數,增加了額外的工作。4、python GIL;5、垃圾回收。
當我們提到一門編程語言的效率時:通常有兩層意思,第一是開發效率,這是對程序員而言,完成編碼所需要的時間;另一個是運行效率,這是對計算機而言,完成計算任務所需要的時間。編碼效率和運行效率往往是魚與熊掌的關係,是很難同時兼顧的。不同的語言會有不同的側重,python語言毫無疑問更在乎編碼效率,life is short,we use python。
雖然使用python的編程人員都應該接受其運行效率低的事實,但python在越多越來的領域都有廣泛應用,比如科學計算 、web伺服器等。程序員當然也希望python能夠運算得更快,希望python可以更強大。
首先,python相比其他語言具體有多慢,這個不同場景和測試用例,結果肯定是不一樣的。這個網址給出了不同語言在各種case下的性能對比,這一頁是python3和C++的對比,下面是兩個case:
從上圖可以看出,不同的case,python比C++慢了幾倍到幾十倍。
python運算效率低,具體是什麼原因呢,下列羅列一些:
第一:python是動態語言
一個變數所指向對象的類型在運行時才確定,編譯器做不了任何預測,也就無從優化。舉一個簡單的例子: r = a + b。 a和b相加,但a和b的類型在運行時才知道,對於加法操作,不同的類型有不同的處理,所以每次運行的時候都會去判斷a和b的類型,然後執行對應的操作。而在靜態語言如C++中,編譯的時候就確定了運行時的代碼。
另外一個例子是屬性查找,關於具體的查找順序在《python屬性查找》中有詳細介紹。簡而言之,訪問對象的某個屬性是一個非常複雜的過程,而且通過同一個變數訪問到的python對象還都可能不一樣(參見Lazy property的例子)。而在C語言中,訪問屬性用對象的地址加上屬性的偏移就可以了。
第二:python是解釋執行,但是不支持JIT(just in time compiler)。雖然大名鼎鼎的google曾經嘗試Unladen Swallow 這個項目,但最終也折了。
第三:python中一切都是對象,每個對象都需要維護引用計數,增加了額外的工作。
第四:python GIL,GIL是Python最為詬病的一點,因為GIL,python中的多線程並不能真正的並發。如果是在IO bound的業務場景,這個問題並不大,但是在CPU BOUND的場景,這就很致命了。所以筆者在工作中使用python多線程的情況並不多,一般都是使用多進程(pre fork),或者在加上協程。即使在單線程,GIL也會帶來很大的性能影響,因為python每執行100個opcode(默認,可以通過sys.setcheckinterval()設置)就會嘗試線程的切換,具體的源代碼在ceval.c::PyEval_EvalFrameEx。
第五:垃圾回收,這個可能是所有具有垃圾回收的編程語言的通病。python採用標記和分代的垃圾回收策略,每次垃圾回收的時候都會中斷正在執行的程序,造成所謂的頓卡。infoq上有一篇文章,提到禁用Python的GC機制後,Instagram性能提升了10%。感興趣的讀者可以去細讀。
推薦課程:Python機器學習(Mooc禮欣、嵩天教授)
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/194812.html