網絡上關於python的課程很是多,圖文、視頻都有,這裏記錄本身的學習歷程,駑馬十駕,功在不捨。python
咱們從事一件工做以前,首要的就是弄清它的概念,名稱,歷史和淵源。
咱們爲何要編程?編程就是想用編程語言開發程序,讓計算機幹活。好比分析金庸全集中的人物關係圖、下載一個全系列的莫扎特音樂等等。而計算機幹過的CPU只認識機器指令。在機器指令和需計算機完成的任務之間,就須要編程語言。什麼是編程語言?你可能已經據說過不少種流行的編程語言,好比很是難學的C語言,很是流行的JAVA語言,適用網頁編程的JavaScript語言等。不一樣的編程語言,幹同一件事,編寫的代碼量,差價很大。
那python是一種面向對象、解釋型的計算機程序設計語言。它由Guido van Rossum在1989年發明,第一個公開發行版於1991年發佈。它的特色是語法簡潔、清晰、優雅、簡單易學。強制採用空白符(white space)做爲語句縮進,而不是採用{}來表示代碼件的層次關係。這在必定程度上減小了碼農輸入量。
如今,全世界差很少有600多種編程語言,但流行的編程語言也就那麼20來種。若是你據說過TIOBE排行榜,你就能知道編程語言的大體流行程度。這是最近10年最經常使用的10種編程語言的變化圖:
[編程語言趨勢圖]linux
總的來講,這幾種編程語言各有千秋。C語言是能夠用來編寫操做系統的貼近硬件的語言,因此,C語言適合開發那些追求運行速度、充分發揮硬件性能的程序。而Python是用來編寫應用程序的高級編程語言。git
當你用一種語言開始做真正的軟件開發時,你除了編寫代碼外,還須要不少基本的已經寫好的現成的東西,來幫助你加快開發進度。好比說,要編寫一個電子郵件客戶端,若是先從最底層開始編寫網絡協議相關的代碼,那估計一年半載也開發不出來。高級編程語言一般都會提供一個比較完善的基礎代碼庫,讓你能直接調用,好比,針對電子郵件協議的SMTP庫,針對桌面環境的GUI庫,在這些已有的代碼庫的基礎上開發,一個電子郵件客戶端幾天就能開發出來。程序員
Python就爲咱們提供了很是完善的基礎代碼庫,覆蓋了網絡、文件、GUI、數據庫、文本等大量內容,被形象地稱做「內置電池(batteries included)」。用Python開發,許多功能沒必要從零編寫,直接使用現成的便可。github
除了內置的庫外,Python還有大量的第三方庫,也就是別人開發的,供你直接使用的東西。固然,若是你開發的代碼經過很好的封裝,也能夠做爲第三方庫給別人使用。
能夠參看python awesome算法
許多大型網站就是用Python開發的,例如YouTube、Instagram,還有國內的豆瓣。不少大公司,包括Google、Yahoo等,甚至NASA(美國航空航天局)都大量地使用Python。數據庫
龜叔給Python的定位是「優雅」、「明確」、「簡單」,因此Python程序看上去老是簡單易懂,初學者學Python,不但入門容易,並且未來深刻下去,能夠編寫那些很是很是複雜的程序。編程
總的來講,Python的哲學就是簡單優雅,儘可能寫容易看明白的代碼,儘可能寫少的代碼。windows
那Python適合開發哪些類型的應用呢?python3.x
首選是網絡應用,包括網站、後臺服務等等;
其次是許多平常須要的小工具,包括系統管理員須要的腳本任務等等;
另外就是把其餘語言開發的程序再包裝起來,方便使用。
最後說說Python的缺點。
任何編程語言都有缺點,Python也不例外。優勢說過了,那Python有哪些缺點呢?
第一個缺點就是運行速度慢,和C程序相比很是慢,由於Python是解釋型語言,你的代碼在執行時會一行一行地翻譯成CPU能理解的機器碼,這個翻譯過程很是耗時,因此很慢。而C程序是運行前直接編譯成CPU能執行的機器碼,因此很是快。
可是大量的應用程序不須要這麼快的運行速度,由於用戶根本感受不出來。例如開發一個下載MP3的網絡應用程序,C程序的運行時間須要0.001秒,而Python程序的運行時間須要0.1秒,慢了100倍,但因爲網絡更慢,須要等待1秒,你想,用戶能感受到1.001秒和1.1秒的區別嗎?這就比如F1賽車和普通的出租車在北京三環路上行駛的道理同樣,雖然F1賽車理論時速高達400千米,但因爲三環路堵車的時速只有20千米,所以,做爲乘客,你感受的時速永遠是20千米。
第二個缺點就是代碼不能加密。若是要發佈你的Python程序,實際上就是發佈源代碼,這一點跟C語言不一樣,C語言不用發佈源代碼,只須要把編譯後的機器碼(也就是你在Windows上常見的xxx.exe文件)發佈出去。要從機器碼反推出C代碼是不可能的,因此,凡是編譯型的語言,都沒有這個問題,而解釋型的語言,則必須把源碼發佈出去。
這個缺點僅限於你要編寫的軟件須要賣給別人掙錢的時候。好消息是目前的互聯網時代,靠賣軟件受權的商業模式愈來愈少了,靠網站和移動應用賣服務的模式愈來愈多了,後一種模式不須要把源碼給別人。
再說了,如今如火如荼的開源運動和互聯網自由開放的精神是一致的,互聯網上有無數很是優秀的像Linux同樣的開源代碼,咱們千萬不要高估本身寫的代碼真的有很是大的「商業價值」。那些大公司的代碼不肯意開放的更重要的緣由是代碼寫得太爛了,一旦開源,就沒人敢用他們的產品了。
學習一門語言,理應學習、掌握它的新特性、新功能,計算機發展突飛猛進,不知是硬件有摩爾定律,軟件新知識也迭代很快。python2的默認字符集是ASCII編碼,寫中文會報錯,字符編碼一直是讓程序員頭疼的一件事情,python2在處理中文的時候的確比較頭疼,在python3.x版本中默認字符集是Unicode。這裏,就選python3.6。python官網
首先咱們選擇是windows平臺,其實windows,linux,Mac,從入門的角度來看,都差很少。這裏選擇windows,是由於你們平常辦公和編程開發在windows平臺下的機率大一些。
python外號「膠水語言」,也就是說它能把不少編程語言、不少功能集成起來。它爲何會這麼強大,很大一部分緣由就是他的包。但包的管理不是一個很容易的事情。爲了解決這些問題,有很多發行版的Python,好比WinPython、Anaconda等,這些發行版將python和許多經常使用的package打包,方便pythoners直接使用,此外,還有virtualenv、pyenv等工具管理虛擬環境。
本身愛嘗試不一樣的工具,嘗試到最後, anaconda,爲何選擇這個,由於其強大而方便的包管理與環境管理的功能,很是便於新手。固然,還有不少課供選擇的,之前有python(x,y)等包的集成環境。但,截至到目前,anaconda集成度較高,使用用戶很是多。
Anaconda是一個用於科學計算的Python發行版,支持 Linux, Mac, Windows系統,提供了包管理與環境管理的功能,能夠很方便地解決多版本python並存、切換以及各類第三方包安裝問題。Anaconda利用工具/命令conda
來進行package和environment的管理,而且已經包含了Python和相關的配套工具。
這裏先解釋下conda、anaconda這些概念的差異。conda
能夠理解爲一個工具,也是一個可執行命令,其核心功能是包管理與環境管理。包管理與pip的使用相似,環境管理則容許用戶方便地安裝不一樣版本的python並能夠快速切換。Anaconda則是一個打包的集合,裏面預裝好了conda、某個版本的python、衆多packages、科學計算工具等等,因此也稱爲Python的一種發行版。其實還有Miniconda,顧名思義,它只包含最基本的內容——python與conda,以及相關的必須依賴項,對於空間要求嚴格的用戶,Miniconda是一種選擇。
進入下文以前,說明一下conda的設計理念——conda將幾乎全部的工具、第三方包都當作package對待,甚至包括python和conda自身!所以,conda打破了包管理與環境管理的約束,能很是方便地安裝各類版本python、各類package並方便地切換。
考慮到軟件源下載速度問題,通常在清華大學開源軟件鏡像站下載,配置軟件源。下載地址,進入之後,會發現有兩個不一樣版本的Anaconda,分別對應Python 2.7和Python 3.5,兩個版本其實除了這點區別外其餘都同樣。後面咱們會看到,安裝哪一個版本並不本質,由於經過環境管理,咱們能夠很方便地切換運行時的Python版本。(因爲我經常使用的Python是3.6,所以傾向於直接安裝Python3.6對應的Anaconda)。選擇最新的python3安裝包進行安裝。安裝完成後,運行一下命令配置
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
這裏選擇pycharm。pycharm社區版對新手來講,已經夠用了。
學習 Python 除了官方的教程以外,推薦一本書 Dive Into Python 有中文版,也有英文版。中文版翻譯質量也很高。
固然,Learn Python The Hard Way 也不錯。不過建議選擇一本照着練習,一個月掌握這個語言的基礎特性問題不大。
推薦一個網絡文字教程廖雪峯的python3課程。
Python 用來實現科學計算的軟件包是 scipy, numpy, matplotlib,其中 numpy 提供高性能的數值去處;scipy 實現機器學習的算法;matplotlib 提供數據可視化。
這三個庫都挺大的,內容也比較多。這裏重點推薦一個很是優質地適合入門的網站:Python Scientific Lecture Notes。一個網站把機器學習想着的 Python 工具所有搞定,而且內容易懂。
經過這個,有如下幾點感悟: