包含carlo在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-hant/n/194812.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-02 14:41
下一篇 2024-12-02 14:41

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29

發表回復

登錄後才能評論