㈠ 怎麼才能最短時、高效、踏實的學習 python
一、踏實寫代碼。
最短又高效,其實這是每個初學者都想要的,但我不得不說,學習任何一門語言,最大的捷徑還是踏踏實實打好基礎、多寫代碼,如果光看書,會一頭霧水,經常看了後面,忘了前面,而且一打開電腦寫代碼就蒙了。主要原因是上機寫代碼太少了,所以勇敢的邁出寫代碼的第一步很關鍵。
二、網課形式很便捷!
如果想要快速入門Python基礎的話,我建議通過網課的方式,網課的好處主要在於:
1、只是學習Python基礎的話,費用便宜
2、無需自己搭建和配置開發環境,採用網頁端方式進行編程上課學習
3、遇到問題有老師及時進行答疑
4、網課學習有更多的交流和其他Python愛好者,可以積累一定的人脈資源,這些對於以後工作還是很有益處的。
㈡ 如何學習Python
1、Python 介紹
學習一門新的語言之前,首先簡單了解下這門語言的背景。Python 是一種面向對象的解釋型計算機程序設計語言,由荷蘭人 Guido van Rossum 於 1989 年發明,第一個公開發行版發行於 1991 年。Python 在設計上堅持了清晰劃一的風格,這使得 Python 成為一門易讀、易維護,並且被大量用戶所歡迎的、用途廣泛的語言。Python 具有豐富和強大的庫。它常被昵稱為膠水語言,能夠把用其他語言製作的各種模塊(尤其是 C/C++)很輕松地聯結在一起。
2、Python 技術浪潮
IT行業熱門技術,更新換代非常的快,技術的浪潮一波接著一波,最初的浪潮無疑是桌面時代,使用 C# 搭建桌面應用開始嶄露頭角,MFC 還是計算機科學專業必學會的東西。接著就是以網站搭建為應用的背景,PHP,Ruby 等語言為主的。再到近幾年非常火熱的以移動開發為應用背景,Java(Android 開發)或者 OC(iOS 開發)語言為主。很明顯如今的浪潮就是以大數據和機器學習為應用背景,Python 語言為主。站在風尖浪口,豬都可以飛的起來。抓住這波技術浪潮,對於從事 IT 行業的人員來說有莫大的幫助。
3、Python 學習
學習一項新的技術,起步時最重要的是什麼?就是快速入門。學習任何一個學科的知識時,都有一個非常重要的概念:最少必要知識。當需要獲得某項技能的時候,一定要想辦法在最短的時間里弄清楚都有哪些最少必要知識,然後迅速掌握它們。
對於快速入門 python 來說最少必要知識,有以下幾點。
(1) Python 基礎語法
找一本淺顯易懂,例子比較好的教程,從頭到尾看下去。不要看很多本,專注於一本。把裡面的常式都手打一遍,搞懂為什麼。推薦去看《簡明python教程》,非常好的一本 Python 入門書籍。
(2)Python 實際項目
等你對 Python 的語法有了初步的認識,就可以去找些 Python 實際項目來練習。對於任何計算機編程語言來說,以實際項目為出發點,來學習新的技術,是非常高效的學習方式。在練習的過程中你會遇到各種各樣的問題:基礎的語法問題(關鍵字不懂的拼寫),代碼毫無邏輯,自己的思路無法用代碼表達出來等等。這時候針對出現的問題,找到對應解決辦法,比如,你可以重新查看書本上的知識(關於基礎語法問題),可以通過谷歌搜索碰到的編譯錯誤(編輯器提示的錯誤),學習模仿別人已有的代碼(寫不出代碼)等等。已實際項目來驅動學習,會讓你成長非常的快。Python 實際項目網上非常的多,大家可以自己去搜索下。合理利用網路資源,不要意味的只做伸手黨。
(3) Python 的學習規劃
當你把上面兩點做好以後,你就已經入門了 Python,接下來就是規劃好自己的以後的學習規劃。能找到一個已經會 Python 的人。問他一點學習規劃的建議,然後在遇到卡殼的地方找他指點。這樣會事半功倍。但是,要學會搜索,學會如何更好地提問,沒人會願意回答顯而易見的問題。當然如果你身邊沒有人會 Python,也可以在網上搜索相應的資料。
Python 可以做的事非常的多,比如:Python 可以做日常任務,比如自動備份你的MP3;可以做網站,很多著名的網站像知乎、YouTube 就是 Python 寫的;可以做網路游戲的後台,很多在線游戲的後台都是 Python 開發的。每個人都有自己感興趣的方向,有的對網站開發比較感興趣,有的對數據處理感興趣,有的對後台感興趣。所以你們可以根據自己感興趣的方向,網上搜索相關資料,加以深入的學習,規劃好自己未來的方向。只要堅持,你就能精通 Python,成為未來搶手的人才。
㈢ 怎樣學習python最快
想學的話,當然是可以學習的,自學可能會有些吃力,也可以選擇專業學校就讀。
python是一門語法優美的編程語言,不僅可以作為小工具使用提升我們日常工作效率,也可以單獨作為一項高新就業技能!
python可以做的事情:
軟體開發:用python做軟體是很多人正在從事的工作,不管是B/S軟體,還是C/S軟體,都能做。並且需求量還是挺大的;
數據挖掘:python可以製作出色的爬蟲工具來進行數據挖掘,而在很多的網路公司中數據挖掘的崗位也不少;
游戲開發:python擴展性很好,擁有游戲開發的庫,而且游戲開發絕對是暴力職業;
大數據分析:如今是大數據的時代,用python做大數據也是可以的,大數據分析工程師也是炙手可熱的職位;
全棧工程師:如今程序員都在向著全棧的方向發展,而學習python更具備這方面的優勢;
系統運維:python在很多linux中都支持,而且語法特點很向shell腳本,學完python做個系統運維也是很不錯的。
你可以考察對比一下有名氣的開設python課程的學校,好的學校會根據市場調研做專業的課程設計。祝你學有所成,望採納。
㈣ 新手該如何學python怎麼學好python
我建議初學者,不要下載具有IDE功能的集成開發環境,比如Eclipse插件等。2)下載完畢後,就可以開始學習了。學習過程中,我建議可以下載一些python的學習文檔,比如《dive into python》,《OReilly - Learning Python》等等。通過學習語法,掌握python中的關鍵字語法,函數語法,數學表達式等等3)學完了基本語法後,就可以進行互動式學習了。python具備很好的交互學習模式,對於書本上的例子我們可以通過交互平台進行操練,通過練習加深印象,達到學習掌握的目的。4)通過以上三個步驟的學習後,我們大致掌握了python的常用方法、關鍵字用法以及函數語法等。接下去的學習上,我們就可以著手學習常用模 塊的使用, 比如os,os.path,sys,string模塊等。我們可以在交互環境中先熟悉使用其中的函數,如果遇到函數的使用上的問題,可以參考python 安裝後的自帶chm幫助文件。5)為了更好得掌握python,我們的學習不能只是停留在學習一些語法或者api階段。在此階段中,我們可以嘗試用python解決我們項目 中遇到的一 些問題,如果項目不是用python開發的,那我們可以想想能不能用python製作一些項目組可以使用的一些工具(utility),通過這些工具簡化 項目組成員的任務,提高我們的工作效率。如果沒有項目,我們也可以自己找些題目來自己練習練習。6)經過以上鍛煉後,我們的python知識水平肯定是越來越高。接下去的學習,我們就要更上一層樓。為了學以致用,真正能應用於項目開發或產 品開發,我 們還必須學習企業應用開發中必須要掌握的網路和資料庫知識。在此的學習就不光是python語言本身的學習了,如果之前沒有學習和掌握很網路和資料庫知 識,在此階段我們可以藉此機會補習一把。7)在此,我想我們對python的使用以及信手拈來了,即使忘了api的用法,我們也可以在短時間內通過查看文檔來使用api。那麼接下去, 我們要學習 什麼呢?那就是設計能力,在學習設計能力的過程中,如果對類等面向對象的概念不清楚的,在此階段也可以學習或加以鞏固。就像飛機設計師設計飛機通過學習模 型來設計一樣,我們也可以通過學習書上的經典例子來學習設計。等有了設計的基本概念後,我們就可以著手設計我們的程序了。在此階段中,我們重要的是學習抽 象的思想,通過隔離變化點來設計我們的模塊。8)到此階段,我們已經是真正入門了。在接下去的工作中,就是要快速地通過我們的所學來服務項目了。在此階段,我們除了掌握python自帶的 模塊外,我 們最好在掌握一些業界廣泛使用的開源框架,比如twisted、peak、django、xml等。通過熟練使用它們,達到閃電開發,大大節省項目寶貴時 間。9)你已經是個python行家了,在此階段,我們在工作中會遇到一些深層次的、具體的困難問題。面對這些問題,我們已經有自己的思考方向和思 路了。
㈤ 怎麼樣才能快速的學習python
如果沒有基礎的話,還是建議找一套完整的學習資料吧,網上資源也那麼多,視頻和文檔都有,你可以找找;我是看的老男孩的視頻,感覺還可以。不過你要邊學邊練,多敲代碼,不能光看。
㈥ python怎麼學比較快
想要快速掌握Python技術,最合適的方法就是參加Python培訓,從入門到精通還需要5個月的時間,入門快、效率高、周期短,同時培訓機構還會提供就業指導服務,幫你提升就業競爭力。
㈦ python新手應該怎麼學習更好
Python是一中面向對象的編程語言,語法簡潔而清晰,具有豐富和強大的類庫。對於初學編程者來說,首選Python是個非常棒的選擇。
3、加入Python討論群,推薦個不錯的qun- 227-435-450態度友好笑眯眯(很重要,這樣高手才會耐心糾正你錯誤常識)。很多小問題,糾結許久,對方一句話點播思路,就可以使你繞很多彎路。
每天的編碼必不可少,既然選擇學習編程,學習Python,堅持編碼應該是必須做到的。沒有代碼積累,要寫出高質量的代碼,幾乎不可能。
4、要善於總結。如果你光學不練,這是不好的,如果你不善於總結,這也是不好的。語言都是用不上的時候開始學習。都是用的上的時候開始復習。要是用得上的時候開始學習,除非你抗壓能力一流,不然我想你心情煩躁,效果會很不好的。學習的時候多總結一下,復習的時候可以翻出來看看,這樣就不至於完全荒廢了,並且恢復相當快速。
學習編程不要太排斥英文。如果讓你直接從英文開始學習,我想這個很難,但是如果用英文版本開始復習,這個就很好了。
5、保持興趣,用最簡單的方式解決問題,什麼底層驅動,各種交換,留給大牛去寫吧。我們利用已經有的包完成。
俗話說的好:興趣是最好的老師
6、在寫過不少基礎代碼之後,可以去各大Python相關的網站閱讀別人的代碼,多閱讀別人的也是提高自己的編碼水平的很好途徑,同時,有把自己的代碼分享給別人閱讀,一邊互相交流促進。
教別人的時候,其實你已經自己再次思考一次了。
最後祝你學有所成,希望對你有所幫助。
㈧ 怎樣才能學好python語言
第一:道——明確目標
其實很多人在學習Python之前很少想這個,因為很多人說:現在Python很火呀,所以我么需要學。這個其實跟你自己沒有什麼關系,例如:你曾經想做一個網站不會開發,現在可以做了,現在Python很火並且你也要學來找工作,未來Python很火,我具備了Python的技能會不錯。
在一生中,我們或多或少總會卡到目標上。在一些我們擅長的領域,我們會有明確的目標,並且積極指導別人:親!幹事之前,你要先定目標啊!
王健林的小目標,大家在朋友圈也都看過了,他會定先掙它一個億。
第二:法——做好你學習Python的系統規劃
1.目前市場需求主流的崗位里,你得選擇一個其中你目前看來可以學,並且最敢興趣學習的方向;
2.在方向選擇好後,對照招聘網站:拉勾、智聯、Boss直聘等網站的崗位要求,進行學習內容的統計與大概的記錄;
3.分模塊的計劃你學習這個模塊的時間和完成的大概目標;
4.列出你可能出現的學習誤差與為之准備的應對方案;
好了,你發現沒有,其實任何學習重要的不是有什麼資料,核心是如何學,學多久,有沒有時間限制,遇到過自己多次學習某個內容或者其他人學習某個內容,最關鍵的一點是在起步階段,開始屬於激情期,激情在前面釋放越多,後面的持續力就很弱,好了這就是關於學習計劃。
廢話說多了,那我們來看看一個普適性的學習Python的流程;
1天——下載並安裝好學習環境:到www.python.org網站上下載一個python3.0以上的版本。我建議初學者,不要下載具有IDE功能的集成開發環境,比如Eclipse插件等。
4周——下載一些python的學習文檔,比如《簡明Python教程》,《笨辦法學Python》等等。通過學習語法,掌握python中的關鍵字語法,函數語法,數學表達式、變數、數據結構、語法等等等
1. 了解Python是什麼,都能做些什麼?
2. 知道什麼是變數、演算法、解釋器
3. Python基本數據類型
4. 列表和元組的操作方法
5. 字元串操作方法
6. 基本的字典操作方法
7.任何知識它的基礎知識都是有些枯燥的,現在我們就可以動手來做一些邏輯層面的東西了。掌握 if、else、elif、while、for、continue、break和列表推導式等這些語句的使用,還有程序中的異常處理。
2周——看完基礎後,就是做一些小項目鞏固基礎,python具備很好的交互學習模式,對於書本上的例子我們可以通過交互平台進行操練,通過練習加深印象,達到學習掌握的目的。
2周——通過以上三個步驟的學習後,我們大致掌握了python的常用方法、關鍵字用法以及函數語法等。接下去的學習上,我們就可以著手學習常用模塊的使用, 比如os,os.path,sys,string模塊等。我們可以在交互環境中先熟悉使用其中的函數,如果遇到函數的使用上的問題,可以參考python 安裝後的自帶chm幫助文件。
2周——為了更好得掌握python,我們的學習不能只是停留在學習一些語法或者api階段。在此階段中,我們可以嘗試用python解決我們項目中遇到的一 些問題,如果項目不是用python開發的,那我們可以想想能不能用python製作一些項目組可以使用的一些工具(utility),通過這些工具簡化 項目組成員的任務,提高我們的工作效率。如果沒有項目,我們也可以自己找些題目來自己練習練習。
2周——Python庫是Python的精華所在,可以說Python庫組成並且造就了Python,Python庫是Python開發者的利器,所以學習Python庫就顯得尤為重要:
2周——經過以上鍛煉後,我們的python知識水平肯定是越來越高。接下去的學習,我們就要更上一層樓。為了學以致用,真正能應用於項目開發或產品開發,我 們還必須學習企業應用開發中必須要掌握的網路和資料庫的知識。在此的學習就不光是python語言本身的學習了,如果之前沒有學習和掌握很網路和資料庫知 識,在此階段我們可以藉此機會補習一把。
3周——到此階段,我們已經是真正入門了。在接下去的工作中,就是要快速地通過我們的所學來服務項目了。在此階段,我們除了掌握python自帶的模塊外,我 們最好在掌握一些業界廣泛使用的開源框架,比如twisted、peak、django、xml等。通過熟練使用它們,達到閃電開發,大大節省項目寶貴時間。
《Python 核心編程》,介紹了 Python 的一些具體領域的開發方法;
《Python 網路數據採集》,很簡單的爬蟲入門書;
《利用 Python 進行數據分析》,介紹了 Pandas 和 NumPy 的用法;
《Flask Web 開發》,如何用 Flask 寫一個博客。
第三:術——你具體的學習手段
1.每天你計劃學習多少時間?例如一天必須學2小時,每天堅持;
2.每個階段的計劃拖延時間不能高於多少時間?
3.如果一個階段不順利如何調整?
其實很多時候,並不是資料不夠多,而是本身的學習思路和計劃出現了問題,那麼其實最後學習Python的結果會變成:懂得了很多道理,收集了很多資料,依然學不好Python。
下面我們推薦6本高分書籍給大家,希望大家學習愉快:
1.Python編程:從入門到實踐
豆瓣評分:9.5
內容簡介:本書由奮戰在Python開發一線近20年的Luciano Ramalho執筆,Victor Stinner、Alex Martelli等Python大咖擔綱技術審稿人,從語言設計層面剖析編程細節,兼顧Python 3和Python 2,告訴你Python中不親自動手實踐就無法理解的語言陷阱成因和解決之道,教你寫出風格地道的Python代碼。
㈨ python怎麼能快速掌握
優就業Python開發課程一共設置5個主要階段,主要學習內容如下:
第一階段:Python核心編程——Python語言基本介紹、面向對象編程、Linux操作系統、文件系統與用戶管理、進程管理與服務配置、Shell編程與bash,源文件編譯、版本控制、MySQL使用、MySQL進階等。
第二階段:全棧開發——HTML、CSS、JavaScript、jQuery、 BootStrap、Vue、Web開發基礎、資料庫操作、FLask配置、Django認識、Models、Templates、Views、Tornado框架進階、ElasticSearch等。
第三階段:網路爬蟲——爬蟲與數據、Scrapy框架、Scrapy框架與信息實時抓取、定時爬取與郵件監控、NoSQL資料庫、Scrapy-Redis框架、百萬量數據採集等。
第四階段:人工智慧——數據分析、pyechart模塊動態可視化、詞雲、分類演算法、聚類演算法、回歸類演算法、關聯演算法、卷積神經網路、TensorFlow+PaddlePaddle、圖像識別等。
第五階段:就業指導——最後就業指導分為面試就業指導、專業技術指導兩方面。
㈩ 如何讓 Python 像 Julia 一樣快地運行
使用 Cython 編譯
一種編譯方式是使用 Cython 編譯器。這個編譯器是使用 Python
編寫的。它可以通過以下命令安裝:
pip install Cython
如果使用 Anaconda,安裝會有所不同。因為安裝有點復雜,所以我編寫了一篇相關的博客文章:將 Cython For Anaconda 安裝在 Windows 上
安裝後,我們使用神奇的 %load_ext 將 Cython 載入到 Notebook 中:
%load_ext Cython
然後就可以在我們的 Notebook 中編譯代碼。我們只需要將想要編譯的代碼放在一個單元中,包括所需的導入語句,使用神奇的 %%cython 啟動該單元:
%%cython
def fib_cython(n):
if n<2:
return n
return fib_cython(n-1)+fib_cython(n-2)
執行該單元會無縫地編譯這段代碼。我們為該函數使用一個稍微不同的名稱,以反映出它是使用 Cython
編譯的。當然,一般不需要這么做。我們可以將之前的函數替換為相同名稱的已編譯函數。
對它計時會得到:
1000 loops, best of 3:1.22 ms per loop
哇,幾乎比最初的 Python 代碼快 3 倍!我們現在比使用 BigInt 的 Julia 快 100 倍。
我們還可以嘗試靜態類型。使用關鍵字 cpdef 而不是 def 來聲明該函數。它使我們能夠使用相應的 C 類型來鍵入函數的參數。我們的代碼變成了:
%%cython
cpdef long fib_cython_type(long n):
if n<2:
return n
return fib_cython_type(n-1)+fib_cython_type(n-2)
執行該單元後,對它計時會得到:
10000 loops, best of 3:36 µs per loop
太棒了,我們現在只花費了 36 微秒,比最初的基準測試快約 100 倍!這與 Julia 所花的 80 毫秒相比更出色。
有人可能會說,靜態類型違背了 Python
的用途。一般來講,我比較同意這種說法,我們稍後將查看一種在不犧牲性能的情況下避免這種情形的方法。但我並不認為這是一個問題。Fibonacci
函數必須使用整數來調用。我們在靜態類型中失去的是 Python 所提供的任意精度。對於 Fibonacci,使用 C 類型 long
會限制輸入參數的大小,因為太大的參數會導致整數溢出。
請注意,Julia 計算也是使用 64 位整數執行的,因此將我們的靜態類型版本與 Julia 的對比是公平的。
回頁首
緩存計算
我們在保留 Python 任意精度的情況下能做得更好。fib 函數重復執行同一種計算許多次。例如,fib(20) 將調用 fib(19) 和
fib(18)。fib(19) 將調用 fib(18) 和 fib(17)。結果 fib(18) 被調用了兩次。簡單分析表明,fib(17) 將被調用 3
次,fib(16) 將被調用 5 次,等等。
在 Python 3 中,我們可以使用 functools 標准庫來避免這些重復的計算。
from functools import lru_cache as cache
@cache(maxsize=None)
def fib_cache(n):
if n<2:
return n
return fib_cache(n-1)+fib_cache(n-2)
對此函數計時會得到:
1000000 loops, best of 3:910 ns per loop
速度又增加了 40 倍,比最初的 Python 代碼快約 3,600 倍!考慮到我們僅向遞歸函數添加了一條注釋,此結果非常令人難忘。
Python 2.7 中沒有提供這種自動緩存。我們需要顯式地轉換代碼,才能避免這種情況下的重復計算。
def fib_seq(n):
if n < 2:
return n
a,b = 1,0
for i in range(n-1):
a,b = a+b,a
return a
請注意,此代碼使用了 Python 同時分配兩個局部變數的能力。對它計時會得到:
1000000 loops, best of 3:1.77 µs per loop
我們又快了 20 倍!讓我們在使用和不使用靜態類型的情況下編譯我們的函數。請注意,我們使用了 cdef 關鍵字來鍵入局部變數。
%%cython
def fib_seq_cython(n):
if n < 2:
return n
a,b = 1,0
for i in range(n-1):
a,b = a+b,a
return a
cpdef long fib_seq_cython_type(long n):
if n < 2:
return n
cdef long a,b
a,b = 1,0
for i in range(n-1):
a,b = a+b,b
return a
我們可在一個單元中對兩個版本計時:
%timeit fib_seq_cython(20)
%timeit fib_seq_cython_type(20)
結果為:
1000000 loops, best of 3:953 ns per loop
10000000 loops, best of 3:51.9 ns per loop
靜態類型代碼現在花費的時間為 51.9 納秒,比最初的基準測試快約 60,000(六萬)倍。
如果我們想計算任意輸入的 Fibonacci 數,我們應堅持使用無類型版本,該版本的運行速度快 3,500 倍。還不錯,對吧?
回頁首
使用 Numba 編譯
讓我們使用另一個名為 Numba 的工具。它是針對部分 Python 版本的一個即時
(jit) 編譯器。它不是對所有 Python 版本都適用,但在適用的情況下,它會帶來奇跡。
安裝它可能很麻煩。推薦使用像 Anaconda 這樣的 Python 發行版或一個已安裝了 Numba 的 Docker 鏡像。完成安裝後,我們導入它的 jit 編譯器:
from numba import jit
它的使用非常簡單。我們僅需要向想要編譯的函數添加一點修飾。我們的代碼變成了:
@jit
def fib_seq_numba(n):
if n < 2:
return n
(a,b) = (1,0)
for i in range(n-1):
(a,b) = (a+b,a)
return a
對它計時會得到:
1000000 loops, best of 3:225 ns per loop
比無類型的 Cython 代碼更快,比最初的 Python 代碼快約 16,000 倍!
回頁首
使用 Numpy
我們現在來看看第二項基準測試。它是快速排序演算法的實現。Julia 團隊使用了以下 Python 代碼:
def qsort_kernel(a, lo, hi):
i = lo
j = hi
while i < hi:
pivot = a[(lo+hi) // 2]
while i <= j:
while a[i] < pivot:
i += 1
while a[j] > pivot:
j -= 1
if i <= j:
a[i], a[j] = a[j], a[i]
i += 1
j -= 1
if lo < j:
qsort_kernel(a, lo, j)
lo = i
j = hi
return a
我將他們的基準測試代碼包裝在一個函數中:
import random
def benchmark_qsort():
lst = [ random.random() for i in range(1,5000) ]
qsort_kernel(lst, 0, len(lst)-1)
對它計時會得到:
100 loops, best of 3:18.3 ms per loop
上述代碼與 C 代碼非常相似。Cython 應該能很好地處理它。除了使用 Cython 和靜態類型之外,讓我們使用 Numpy
數組代替列表。在數組大小較大時,比如數千個或更多元素,Numpy 數組確實比
Python 列表更快。
安裝 Numpy 可能會花一些時間,推薦使用 Anaconda 或一個已安裝了 Python 科學工具組合的 Docker 鏡像。
在使用 Cython 時,需要將 Numpy 導入到應用了 Cython 的單元中。在使用 C 類型時,還必須使用 cimport 將它作為 C 模塊導入。Numpy
數組使用一種表示數組元素類型和數組維數(一維、二維等)的特殊語法來聲明。
%%cython
import numpy as np
cimport numpy as np
cpdef np.ndarray[double, ndim=1] \
qsort_kernel_cython_numpy_type(np.ndarray[double, ndim=1] a, \
long lo, \
long hi):
cdef:
long i, j
double pivot
i = lo
j = hi
while i < hi:
pivot = a[(lo+hi) // 2]
while i <= j:
while a[i] < pivot:
i += 1
while a[j] > pivot:
j -= 1
if i <= j:
a[i], a[j] = a[j], a[i]
i += 1
j -= 1
if lo < j:
qsort_kernel_cython_numpy_type(a, lo, j)
lo = i
j = hi
return a
cpdef benchmark_qsort_numpy_cython():
lst = np.random.rand(5000)
qsort_kernel_cython_numpy_type(lst, 0, len(lst)-1)
對 benchmark_qsort_numpy_cython() 函數計時會得到:
1000 loops, best of 3:1.32 ms per loop
我們比最初的基準測試快了約 15 倍,但這仍然不是使用 Python 的最佳方法。最佳方法是使用 Numpy 內置的 sort()
函數。它的默認行為是使用快速排序演算法。對此代碼計時:
def benchmark_sort_numpy():
lst = np.random.rand(5000)
np.sort(lst)
會得到:
1000 loops, best of 3:350 µs per loop
我們現在比最初的基準測試快 52 倍!Julia 在該基準測試上花費了 419 微秒,因此編譯的 Python 快 20%。
我知道,一些讀者會說我不會進行同類比較。我不同意。請記住,我們現在的任務是使用主機語言以最佳的方式排序輸入數組。在這種情況下,最佳方法是使用一個內置的函數。