Python從入門到精通(python程式設計初學者指南)

作者 | 迷途兄

來源 | 迷途書童小陋室

注:"人生苦短,我用Python"(Life is short, you need Python)

Python崇尚優雅、明確、簡單,是一門優秀,並被廣泛使用的程式語言。特別是近年來,隨著大資料和人工智慧技術的發展,Python爆發出蓬勃的生命力,受到了越來越多的歡迎和重視。小到自動化指令碼輔助日常工作,中到資料統計分析與視覺化,大到深度學習、系統運維,無論是對理工科,還是文科生,Python都是一把不可多得的利器,非常值得學習和使用。

以下內容來源於筆者寫給實驗室師弟師妹的簡單Python入門手冊,歡迎大家來到Python的精彩世界!

全文約4100字,包含8副圖片和多個程式碼片段,閱讀時間約7-8分鐘。

1 簡介

Python是著名的“龜叔”Guido van Rossum在1989年聖誕節期間,為了打發無聊的聖誕節而編寫的一門程式語言。他希望這個新的叫做Python的語言,能符合他的理想:創造一種C和shell之間,功能全面,易學易用,可拓展的語言。之所以選中Python(大蟒蛇的意思)作為該程式語言的名字,是因為他是一個叫Monty Python的喜劇團體的愛好者。

Python重要歷史時刻表如下:

1982年,Guido從阿姆斯特丹大學獲得了數學和計算機碩士學位,因此他可以算是一位數學家,不過據說他更享受使用計算機解決問題的感覺

1989年,聖誕節假期,Guido開始寫Python語言的編譯器,"大蟒蛇"開始被孵化

1991年,第一個Python編譯器誕生。它是用C語言實現的,並能夠呼叫C語言的庫檔案。從一出生,Python已經具有了:類,函式,異常處理,包含表和詞典在內的核心資料型別,以及模組為基礎的拓展系統

1994年,Python 1.0 - January 1994 增加了 lambda, map, filter and reduce

2000年,Python 2.0 - October 16, 2000,加入了記憶體回收機制,構成了現在Python語言框架的基礎

2004年,Python 2.4 - November 30, 2004, 同年目前最流行的WEB框架Django 誕生

2006年,Python 2.5 - September 19, 2006

2008年,Python 2.6 - October 1, 2008

2010年,Python 2.7 - July 3, 2010

2014年,龜叔在2014年11月,宣佈Python 2.7的支援直到2020年為止,重申不會再有2.8版本的釋出,希望使用者儘快遷移到Python 3.4 版本上

2008年,Python 3.0 - December 3, 2008。為了不帶入過多的累贅,徹底修復過去版本中的缺陷和錯誤,Python 3.x在設計的時候沒有考慮向下相容。與Python 2相比,新版本最大的改變是更好的unicode編碼支援(預設情況下所有文字都轉換成unicode)與更加健全的bytes/unicode編碼分離

2009年,Python 3.1 - June 27, 2009

2011年,Python 3.2 - February 20, 2011

2012年,Python 3.3 - September 29, 2012

2014年,Python 3.4 - March 16, 2014

2015年,Python 3.5 - September 13, 2015

2016年,Python 3.6 - documentation released on 23 December 2016.

2018年,Python 3.7 - documentation released on 27 June 2018

是的,雖然Python近幾年來大火,但它並不是一門新語言,而是已經30歲了。目前(2019年4月)Python在TIOBE排行榜中排行第四,受歡迎程度和熱度僅次於Java、C,與C 不相上下。

那麼哪些地方在用Python呢?首先來幾個鮮活的應用案例,給大家一個直觀的印象:

谷歌:在Google App Engine、Google earth、網路爬蟲等專案大量使用了Python;

NASA:美國航天局(NASA)大量使用Python進行資料分析和運算;

眾多大型網站:Youtube,Dropbox,Facebook,豆瓣,知乎等大量基礎庫和功能通過Python開發;

Redhat:yum包管理工具基於Python開發;

深度學習方面:TensorFlow、PyTorch、Keras等著名的深度學習庫都是基於Python;

GitHub:在全球最大的程式碼託管平臺和開發者社羣GitHub網站,程式語言熱度Python長期排在前三;

2 Python的優缺點

Python語言具有如下多方面的優點:

  • “優雅”、“明確”、“簡單”

引用一個說法,Python的哲學是就是簡單優雅,儘量寫容易看明白的程式碼,儘量寫少的程式碼。如此定位,使得Python對程式設計新手十分友好,初學者容易入門,學習成本更低。

  • 功能強大

Python作為一種高階語言,具有豐富的第三方庫,覆蓋了數值計算(numpy)、科學繪圖(matplotlib)、Web開發、網路爬蟲、應用程式介面GUI、資料庫等大量內容。你能想到的幾乎所有工作都可以用Python實現。

  • 開發效率高

由於Python社羣提供大量功能各異的庫,因此開發者無需事必躬親,遇到主流的功能需求時可以直接呼叫,在基礎庫的基礎上施展拳腳,可以節省你很多功力和時間成本,大大降低開發週期。同樣的功能,C語言要花1天寫1000行程式碼,而Python可能只需1-2個小時寫20行就可以搞定。

  • 無需關注底層細節

Python作為一種高階開發語言,在程式設計時無需關注底層細節(如記憶體管理等)。

  • 可移植性

Python可以在多種主流的平臺(Windows、Linux、Mac)上執行,大部分情況下無需考慮所用功能的平臺依賴性,程式碼在無需修改的前提下執行在多種系統平臺上。

一個硬幣總有兩面,那麼Python有缺點嗎?答案是肯定的,總結如下:

  • 執行速度慢

因為Python是一種高階開發語言,不像C語言一樣可以深入底層硬體最大程度上挖掘榨取硬體的效能。另一方面,Python是解釋型語言,程式碼在執行時會一行一行地翻譯成CPU能理解的機器碼。而C程式是執行前直接編譯成CPU能執行的機器碼。因此它的執行速度要慢於C語言。

但需要注意的是,這種慢對於不需要追求硬體高效能的應用場合來講根本不是問題,因為它們比較的數量級根本不是使用者能直觀感受到的!例如開發一個下載MP3的網路應用程式,C程式的執行時間需要0.001秒,而Python程式的執行時間需要0.05秒,慢了50倍,但由於網路更慢,需要等待1秒,使用者體驗幾乎沒有差別。此外,Python的高開發效率極大地彌補了執行速度慢的弱點。

  • 不能加密

Python的開源性質,既是優點又是缺點。Python沒有編譯打包的過程,釋出程式時我們必須公開原始碼!這個缺點僅限於你想單純靠賣開發出來的軟體產品掙錢的時候。但在這個開發互聯的時代,不靠賣產品本身來賺錢的商業模式越來越主流了,所以這也不是根本問題。

3 Python基礎

程式設計開發規範

作為一門開發語言,Python自然也有自己的程式設計規範,以下是常見的特有且必須遵循的規範:

  • [程式命名] 編寫的Python程式必須以.py結尾;
  • [變數命名] Python中定義變數使用字母、數字、下劃線的任意組合,且不能以數字開頭。不能以Python內建的關鍵字來命名變數(如and,import,global,finally等);
  • [註釋] 單行註釋用#開頭,單獨一行作為註釋或者在程式碼後面通過#跟上註釋均可,

# 這是一個註釋 print("Hello, World!")

   

多行註釋在首尾處用成對的三引號引用即可,可以是成對的三個單引號或者三個雙引號。

''' 這是多行註釋,用三個單引號 這是多行註釋,用三個單引號  這是多行註釋,用三個單引號 '''

   

  • [程式碼層級] 程式碼與程式碼之間的邏輯層級關係(涉及邏輯判斷、包含關係等情況)通過空格來界定,第一層頂格編寫,第二層(被包含或者邏輯判斷後的執行動作)開頭預留4個空格。同一個層級的程式碼必須嚴格對齊。如下面例子所示:

import os, datetime # 引入 os, datetime 模組   def test_getYesterday():   today = datetime.date.today()   yesterday = today - datetime.timedelta(days=1)   return yesterday   def test_for():  for i in range(0,100,3):  print (i) def test_filterFiles(dir0, suffix):  if not os.path.exists(dir0):  print ('dir [%s] not exists'%dir0)  return  files = os.listdir(dir0)  for nm in files:  if not nm.endswith(suffix):  continue  print (nm) if __name__ == "__main__":  print ( test_getYesterday() )  print ( test_for() )  dir0 = 'c:/myfiles'  suffix = '.txt'  print ( test_filterFiles(dir0, suffix) )

   

2.2 常用模組

  • [os] 與作業系統互動的一個介面,可用來建立、得到、訪問、遍歷目錄,呼叫系統或外部命令;
  • [datetime] 時間處理,可以做時間的加減、與字串的相互轉換、時間大小比較等;
  • [math] 常用的數學函式;
  • [numpy] numpy(Numerical Python extensions)是一個第三方的Python包,用於科學計算。這個庫的前身是1995年就開始開發的一個用於陣列運算的庫。經過了長時間的發展,基本上成了絕大部分Python科學計算的基礎包,當然也包括所有提供Python介面的深度學習框架;
  • [matplotlib] 是Python中最常用的視覺化工具之一,可以非常方便地建立海量型別地2D圖表和一些基本的3D圖表。Matplotlib最早是為了視覺化癲癇病人的腦皮層電圖相關的訊號而研發,因為在函式的設計上參考了MATLAB,所以叫做Matplotlib。Matplotlib首次發表於2007年,在開源和社羣的推動下,現在在基於Python的各個科學計算領域都得到了廣泛應用。Matplotlib的原作者John D. Hunter博士是一名神經生物學家,2012年不幸因癌症去世,感謝他建立了這樣一個偉大的庫。

使用這個庫之後(再配合其他小模組),我再也沒用過Matlab、Origin、GMT畫圖了!

  • [random] 有關隨機數的模組;
  • [pip] pip是一個隨安裝自帶的Python模組管理軟體,常用命令:

pip升級自己:pip install --upgrade pip

查詢、安裝與解除安裝:使用search、install引數。

pip search/install/uninstall 庫名xxx

檢視某個庫的資訊:pip show xxx

檢視已經安裝的庫:pip list

獲取過期的庫:pip list --outdated

更新過期的包:pip install --upgrade 庫名xxx

4 安裝Python

目前,Python有兩個大版本,一個是2.x版,一個是3.x版,這兩個版本是不相容的。由於3.x版越來越普及,推薦安裝和使用最新的3.x版本。安裝後,你會得到Python直譯器(就是負責執行Python程式的),一個命令列互動環境,還有一個簡單的整合開發環境(IDLE)。

4.1 在Windows上安裝Python

首先,根據你的Windows版本(64位還是32位)從Python的官方網站下載Python 3.7對應的64位安裝程式或32位安裝程式。然後,執行下載的exe安裝包。特別要注意勾上Add Python 3.7 to PATH,然後點“Install Now”即可完成安裝。完成後,開啟命令提示符視窗,敲入python,若輸出版本資訊,就說明安裝成功!若輸出‘python’ 不是內部或外部命令,也不是可執行的程式或批處理檔案。表示安裝失敗,需查詢原因重新安裝。

4.2 在Linux系統安裝Python

各Linux發行版系統中都自帶Python環境,有的是2.7.x版本,有的是3.x版本。對於我們平時的使用來說,Python 2和3版本幾乎沒什麼區別。使用者也可以同時安裝兩個版本,在環境變數中用別名alias加以區分。在終端輸入python -v命令檢視一下是否安裝Python。輸入which python看一下Python可執行檔案的位置。

4.3 其他

安裝成功後,隨直譯器自帶的僅有最常用的Python模組。想要使用其他需要的模組,則需要在控制檯視窗使用pip install xxx單獨線上安裝。這樣讓使用者可以自由地選擇搭積木的形式,無需為龐雜但又用不到或很少用到的功能浪費大量硬碟空間(對比下Matlab!)。部分模組需要下載對應的.whl檔案後再離線安裝。具體安裝步驟可參考網路。

工欲善其事,必先利其器!安裝完Python直譯器後,還推薦安裝Python的整合開發環境(IDE)PyCharm。PyCharm帶有一整套可以幫助使用者在使用Python語言開發時提高其效率的工具,比如除錯、語法高亮、Project管理、程式碼跳轉、智慧提示、自動完成、單元測試、版本控制,相當於Python程式語言的visual studio。推薦官網下載社羣免費版
       http://www.jetbrains.com/pycharm/download。具體安裝及設定可參考網路。

寫好你的Python指令碼後,在終端輸入 python
       your_python_script_path.py 或者在IDE中點選“執行“就可以執行了。

5 簡單例子

下面以4個簡單例子說明Python在資料下載、科學繪圖、矩陣運算方面的應用。例子在windows 7平臺 Python3.7環境測試通過。(公眾號後臺傳送您的郵箱地址,我將以附件形式傳送本期 pdf 文件和相關例子給您。)

Sample1:呼叫wget批量下載ftp站點資料

Sample2:畫以時間為x軸,一行兩列同y軸圖

Sample3:畫世界地圖/人口圖

Python畫世界地圖需要安裝basemap包,具體安裝過程參考
       https://zhuanlan.zhihu.com/p/34509847。

使用basemap畫人口分佈圖例子可見
       https://www.cnblogs.com/vamei/archive/2012/09/16/2687954.html 。

Sample4:用Numpy做矩陣加減乘除和求逆

6 推薦學習過程

筆者學習Python的過程為:

(1)先看 廖雪峰官方網站。看到了[模組]這一小節,後面都是快速瀏覽;

(2)開始寫一些簡單的呼叫wget下載資料、資料夾下遍歷檔案進行重新命名/移動/複製操作、彙總與提取txt裡資料、資料統計與分析;

(3)通過官網學習matplotlib模組,將畫圖工作幾乎全部交給Python執行;

(4)閱讀《Python Cookbook》,學到了一些語法糖和Pythonic(就是"很Python",或者說很簡潔優美的)的Python程式設計技巧。根據這些技巧優化Python程式碼。(這本書適合有基本Python語法基礎)

(5)以上過程都伴隨著 Google 搜尋!

以上經驗可供讀者參考。事後總結,在第1和2步中間,如果買一本程式設計師推薦的Python入門書籍放在手邊不時翻閱和參考會更好。

推薦參考資料

  • 廖雪峰的官方網站 https://www.liaoxuefeng.com/
  • matplotlib官方網站及大量原始碼和示例 https://matplotlib.org/gallery/index.html
  • 本公眾號:-)

[長按圖片識別二維碼即可快速關注]