1. 程式人生 > >Python從菜鳥到高手(1):初識Python

Python從菜鳥到高手(1):初識Python

1 Python簡介

1.1 什麼是Python

  Python是一種面向物件的解釋型計算機程式設計語言,由荷蘭人吉多·範羅蘇姆(Guido van Rossum)於1989年發明,第一個公開發行版發行於1991年。目前Python的最新發行版是Python3.6。

  Python是純粹的自由軟體,原始碼和直譯器都遵循 GPL(GNU General Public License)協議。Python語法簡潔清晰,特色之一是強制用空白符(white space)作為語句縮排。

  Python具有豐富和強大的庫。它常被稱為膠水語言,能夠把用其他語言製作的各種模組(尤其是C/C++)很輕鬆地整合在一起。常見的一種應用場景是,使用Python快速生成程式的原型(有時甚至是程式的最終介面),然後對其中有特別要求的部分,用更合適的程式語言改寫,比如3D遊戲中的圖形渲染模組,效能要求特別高,就可以用C/C++重寫,然後封裝為Python可以呼叫的擴充套件類庫。需要注意的是在您使用擴充套件類庫時可能需要考慮平臺問題,某些庫可能不提供跨平臺的實現。

  儘管Python原始碼檔案(.py)可以直接使用python命令執行,但實際上Python並不是直接解釋Python原始碼,而是先將Python原始碼編譯生成Python Byte Code(Python位元組碼,位元組碼檔案的副檔名一般是.pyc),然後再由Python Virtual Machine(Python虛擬機器,可以簡稱為PVM)來執行Python Byte Code。也就是說,這裡說Python是一種解釋型語言,指的是解釋Python Byte Code,而不是Python原始碼。這種機制的基本思想跟Java和.NET是一致的。

  儘管Python也有自己的虛擬機器,但Python的虛擬機器與Java或.NET的虛擬機器不同的是,Python的虛擬機器是一種更高階的虛擬機器。這裡的高階並不是通常意義上的高階,不是說Python的虛擬機器比Java或.NET的功能更強大,而是說與Java 或.NET相比,Python的虛擬機器距離真實機器的距離更遠。或者可以這麼說,Python的虛擬機器是一種抽象層次更高的虛擬機器。Python語言程式程式碼的編譯和執行過程如下圖所示。
image

1.2 Python的應用領域

  Python是一種跨平臺程式語言,理論上,Python可以執行在任何作業系統平臺上。目前最常用的作業系統平臺是Windows、Mac OS X和Linux。毫無疑問,這3個平臺都會成為Python的主戰場。

  Python的簡單易學、眾多第三方程式庫,以及執行速度快等特性讓Python的應用領域異常廣泛。Python的應用領域主要有以下幾個方面。

  • Linux/Unix運維
  • 命令列程式開發
  • GUI程式開發(PyQt 、Kivy等)
  • Web程式開發(Django等框架)
  • 移動App開發(PyQt 、Kivy等)
  • 服務端程式開發(基於Socket等協議)
  • 網路爬蟲(為搜尋引擎、深度學習等領域提供資料來源)
  • 資料分析
  • 深度學習
  • 科學計算

      儘管這裡沒有列出Python的所有應用領域,但光這些列出的領域,就已經包含了絕大多數開發場景。用過Mac OS X或Linux的讀者會發現,在這兩個作業系統中,已經內建了Python直譯器,也就是說,Python程式可以在Mac OS X和Linux上直接執行。所以很多運維工程師習慣使用Python來完成很多自動化操作。而且Python在操作網路、文字方面尤為突出。Google搜尋引擎的第一個版本就是用Python寫的。現在超級火熱的深度學習也離不開Python,而且Python已經成為了深度學習的第一語言。因此,從各個角度來看,無論是學生、程式設計師,還是資料分析師,或是科學家,都離不開Python。Python儼然已經成為了程式語言領域的世界語。

    ### 1.3 如何學好Python

      如何學好Python語言,是所有初學者需要共同面對的問題,其實每種程式語言的學習方法都大同小異。下面是給初學者的幾點建議。

  • 大體瞭解一下Python是一種怎樣的程式語言,以及主要的應用領域。說白了,就是要了解Python能做什麼,擅長做什麼。對Python語言有一個巨集觀的認識。

  • 搭建開發環境,不管三七二十一,先弄出一個Hello World再說(可以複製現有的程式碼)。這樣會給自己帶來繼續學習下去的信心。我們可以設想,學了一個星期,如何連一行程式碼都寫不出來,繼續學下去的興趣還會剩多少呢?
  • 不要深究設計模式,這些東西是給那些有多年經驗的程式設計師準備的,而且設計模式也不是用來學的,更不是用來記的,是依靠自己的多年經驗和實踐得出來的。這就像學英語,只管說就好了,管他什麼語法,說多了,英語自然就純正了。所以在一開始寫程式時,只管寫就好了,讓設計模式見鬼去吧!
  • 模仿書中的例子程式碼,一定要自己親手寫程式碼,當然,一開始為了看執行結果,可以將書中的例子直接複製過來,但一定要完全自己寫一遍,程式碼可以與書中的例子不同,只要實現同樣的功能即可。
  • 在編寫程式碼的過程中,不需要對Python語言的語法死記硬背,如果某些語法實在記不住,就把這些語法寫在卡片上,或乾脆放到有道雲筆記上,以便隨時檢視,寫多了自然就記住了。
  • 初學者不需要大量閱讀Python的書籍,也不需要在網上查閱過多的技術資料,因為在自己的功力還沒有達到一定火候時,攝入太多的資訊會分散自己的精力,可能會適得其反。用一句武林中的話說就是:走火入魔。因此,對於初學者來說, 應充分利用本書給出的程式碼多做練習,當學會了本書給出的各種知識和技巧後,就可以隨心所欲地攝取任何自己想獲得的知識了。
  • 讀者應充分利用隨書贈送的Python視訊課程,這套視訊課程是與本書同步的。書與視訊的差別就是書只能給出一個結果,而視訊不僅可以給出結果,還可以詳細演示操作過程,這對於初學者尤其重要。
  • 在模仿書中例子編寫程式碼的過程中,可能對有些程式碼沒有理解透徹,這並不要緊,讀者應仔細閱讀本書的相關內容,以及利用隨書贈送的Python視訊課程反覆觀看,以便領悟其中的奧祕。如果實在領悟不了,也可以到極客起源IT問答社群(https://geekori.com )去提問,會有很多人回答你提出的問題。
  • 本書配有大量練習題,讀者可以通過這些練習題更好地掌握書和視訊中的知識點,而且這些練習題不是生硬地給出,而是通過“過關斬將”、“測能力”等形式給出(這些功能需要依託歐瑞科技旗下“極客題庫”小程式實現)。讀者可以通過這些功能以闖關的方式完成自己的學習任務,並對自己的知識點掌握情況瞭如指掌。
  • 經常總結是一個好習慣,這個習慣對於程式設計師來說尤其重要。讀者可以經常把自己的學習心得,以及經常需要查閱的內容釋出到部落格(如https://geekori.com )上,這樣不僅可以提高自己的技術能力,還可以提高自己的語言表達能力。
  • 經常回答同行提出的技術問題也是一種提高技術能力的方式,而且更有效。如果你沒有能力回答任何技術問題,或只能回答不到10%的技術問題,那麼你還是個小白。如果能回答超過30%的技術問題,那麼說明你已經至少達到了程式設計師的中級水平,如果這個比例是50%,那麼恭喜,你已經成為該領域的高手了。如果提高到80%,會毫無懸念地成為該領域的專家。另外,歐瑞科技旗下的極客起源IT問答社群(https://geekori.com )包含了李寧老師大量學員和讀者提出的各種問題,各位讀者也可以試試自己到底屬於哪個層次。另外,在https://geekori.com 中提問、回答問題以及撰寫部落格,都會獲得可觀的積分,可以換取更多的學習資源。
  • 大量閱讀原始碼。如果前面的方法讀者做的都很好,那麼相信讀者的技術水平已經有了一個質的飛躍,剩下來的工作就是更進一步地提高自己的技術能力。閱讀各種開源專案的原始碼是一個非常好的方式。另外,要注意,閱讀原始碼不是目的,目的是要理解這些原始碼背後的原理,當然,最終的目的是自己可以實現一個類似的功能。讀者可以到https://github.com 獲取各種型別的Python原始碼。

2 搭建Python開發環境

### 2.1 安裝官方的Python執行環境

  不管用什麼工具開發Python程式,都必須安裝Python的執行環境。由於Python是跨平臺的,所以在安裝之前,先要確定在哪一個作業系統平臺上安裝,目前最常用的是Windows、Mac OS X和Linux三大平臺。由於目前使用Windows的人數最多,所以本書主要以Windows為主介紹Python執行環境的搭建與程式的開發。

  讀者可以直接到Python的官網下載相應作業系統平臺的Python安裝包。

  進入下載頁面,瀏覽器會根據不同的作業系統顯示不同的Python安裝包下載連結。如果讀者使用的是Windows平臺,會顯示如下圖所示的Python下載頁面。

image

  如果讀者使用的是Mac OS X平臺,會顯示如下圖所示的Python下載頁面。

image

  不管是哪個作業系統平臺的下載頁面,都會出現“Download Python 3.6.2”和“Download Python 2.7.13”兩個按鈕(隨著時間的推移,可能版本號略有不同)。由於本書使用Python 3講解,所以點選“Download Python3.6.2”按鈕即可。如果是Windows平臺,下載的是exe安裝程式,如果是Mac OS X平臺,下載的是pkg檔案,這是Mac OS X上的安裝程式,直接安裝即可。

  現在主要來說說在Windows平臺如何安裝Python執行環境。首先執行下載的exe檔案,會顯示如下圖所示的Python安裝介面。建議讀者選中介面下方的“Add Python 3.6 to PATH”複選框,這樣安裝程式就會自動將Python的路徑加到PATH環境變數中。

image

  在該介面中出現兩個安裝選項,“Install Now”和“Customize installation”,一般點選“Install Now”即可,點選該選項後,會開始安裝Python,下圖是顯示安裝進度的介面,讀者只需要耐心等待Python安裝完即可。

image

  安裝完後,會出現下圖所示的安裝成功介面。

image

### 2.2 配置PATH環境變數
  在安裝完Python執行環境後,我們可以測試一下Python執行環境,不過如果在安裝Python的過程中忘記了選中“Add Python 3.6 to PATH”複選框,那麼預設情況下,Python安裝程式是不會將Python安裝目錄新增到PATH環境變數的。這樣一來,我們就無法在Windows命令列工具中的任何目錄執行python命令了,必須進入Python的安裝目錄才可以使用python命令。

image

完整目錄

京東
噹噹

  為了更方便地執行python命令,建議將Python安裝目錄新增到PATH環境變數中。在Windows平臺配置PATH環境變數的步驟如下:

  1. 回到Windows的桌面,滑鼠右鍵“計算機”,在彈出選單中單擊 “屬性”選單項,會顯示如下圖所示的“系統”視窗。

image

  點選“系統”視窗左側的“高階系統設定”,會彈出如下圖所示的“系統屬性”視窗。

image

  點選“系統屬性”視窗下方的“環境變數(N)…”按鈕,會彈出如下圖所示的“環境變數”視窗。

image

  在“環境變數”視窗有兩個列表,上面的列表是為Windows當前登入使用者設定環境變數,在這裡設定的環境變數只對當前登入使用者有效。下面的列表是對所有使用者設定的環境變數,也就是說這些變數對所有的使用者都有效。讀者在哪裡設定PATH環境變數都可以,本書在上面的列表中設定了PATH環境變數。如果在列表中沒有PATH環境變數,點選“新建(N)…”按鈕新增一個新的PATH環境變數。如果已經有了PATH環境變數,雙擊PATH,就會彈出“編輯使用者變數”對話方塊。

  讀者需要在“變數值(V)”文字框中新增Python的安裝目錄,多個路徑之間要用分號(;)分隔。那麼我們怎麼找到Python的安裝路徑呢?實際上,在Python安裝介面的“Install Now”按鈕下方就是Python的預設安裝路徑,這個路徑可以修改,不過一般保持預設設定即可。如果仍然使用Python的預設安裝路徑,那麼需要在PATH環境變數的最後新增如下的路徑。

C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32

  我們可以進入該路徑,就會看到如下圖所示的目錄內容。很顯然,我們要使用的就是目錄中的python.exe檔案。

image

  現在開啟Windows命令列工具,執行python –version命令,如果輸出Python 3.6.2,說明Python安裝成功了。

### 2.3 安裝Anaconda Python開發環境
  開發一個完整的Python應用,光使用Python本身提供的模組是遠遠不夠的,因此,需要使用大量第三方的模組。在釋出Python應用時安裝這些第三方模組是一件令人頭痛的事,不過有了Anaconda,讓這件事輕鬆不少。Anaconda是一個整合的Python執行環境。除了包含Python本身的執行環境外,還集成了很多第三方模組,如本書後面要將的numpy、pandas、flask等模組都整合在了Anaconda中,也就是說,只要安裝了Anaconda,這些模組都不需要安裝了。
  Anaconda的安裝相當簡單,首先進入Anaconda的下載頁面,地址如下:
https://www.anaconda.com/download

  Anaconda的下載頁面也會根據使用者當前使用的作業系統自動切換到相應的Anaconda安裝包。Anaconda是跨平臺的,支援Windows、Mac OS X和Linux。不管是哪個作業系統平臺的安裝包,下載直接安裝即可。

  Anaconda的安裝包分為Python3.x和Python2.x兩個版本,由於目前Python3.x最新版是Python3.6,而Python2.x最新版是Python2.7,所以習慣上稱這兩個版本為Python3.6版和Python2.7版,由於本書使用的是Python3.6,所以建議讀者下載Python3.6版的Anaconda。下載介面如下圖所示。下載完後,直接安裝即可,如果安裝完後,如果未設定Python的PATH環境變數,可以按上一節的方式進行設定。

image

### 2.4 安裝PyCharm

  PyCharm是一個專門用於開發Python程式的IDE,由JetBrains公司開發,這個公司開發出了很多非常流行的IDE,例如,WebStorm、Intellj IDEA等,其中Android Studio(開發Android App的IDE)就是基於Intellj IDEA社群版開發的。

  PyCharm有兩個版本:社群版和專業版。社群版是免費的,但功能有限,不過使用PyCharm編寫本書的案例足夠了。

  讀者可以到下面的PyCharm官網下載PyCharm的安裝檔案。

  儘管PyCharm下載頁面後,將頁面垂直滾動條滑動到中下部,會看到如下圖所示的PyCharm專業版和社群版的下載按鈕。

image

  PyCharm下載頁面會根據使用者當前使用的作業系統自動切換到相應的安裝檔案,Windows是exe檔案,Mac OS X是dmg檔案,Linux是tar.gz檔案。讀者只需要點選右側的“DOWNLOAD”按鈕即可下載相應作業系統平臺的安裝程式。

  下載完PyCharm後即可執行PyCharm,第1次執行PyCharm,會顯示如下圖所示的歡迎介面。點選“Create New Project”按鈕即可建立Python工程。

image

2.5 配置PyCharm

  現在點選PyCharm歡迎介面的“Create New Project”按鈕會顯示“New Project”視窗,這個視窗是用來建立Python工程的。在“Location“文字框中輸入Python工程的名字,如果讀者要選擇不同的Python執行環境,可以點選“Project Interpreter”,會在“New Project”視窗下方顯示如下圖所示的Python執行環境選擇介面。

image

  如果讀者已經配置好了PyCharm中的Python執行環境,從“Interpreter”列表中選擇一個Python執行環境即可。如果讀者還沒有對PyCharm進行配置,需要點選“Interpreter”列表框右側的按鈕,然後在彈出選單中點選“Add Local…”選單項,會彈出如下圖所示的“Add Local Python Interpreter”視窗。

image

  選擇左側列表中的“Virtualenv Environment”,點選右側“Interpreter”列表框右側的省略號按鈕,會彈出一個“Select Python Interpreter”視窗,如下圖所示。在該視窗中選擇Anaconda或其他Python直譯器,然後點選“OK”按鈕關閉該視窗。

image

  接下來回到“New Project”視窗,在“Interpreter”列表中選擇剛才指定的Python執行環境,最後點選“Create”按鈕建立Python工程。一個空的Python工程如下圖所示。

image

  Python原始碼檔案可以放在Python工程的任何位置,通常會將Python原始碼檔案放在src目錄中,然後選擇src目錄,在右鍵選單中點選“New”>“Python File”選單項建立一個Python檔案(這裡是Test.py),如下圖所示。

image

  第一次執行Python程式可以選擇Test.py檔案,然後在右鍵選單中選擇“Run ‘Test’”選單項會執行Test.py指令碼檔案,以後再執行,可以直接點選MyCharm主介面右上角的綠色箭頭按鈕。現在為Test.py檔案輸入一行簡單的程式碼,如print(‘hello world ‘),然後執行Test.py指令碼檔案,會得到如下圖所示的輸出結果。如果讀者按前面的步驟進行,並得到這個輸出結果,就說明PyCharm已經安裝成功了。

image

### 2.6 Python中的REPL環境

Python有如下3種執行方式。
- 直接通過python命令執行
- 在Python IDE中執行
- 在Python的REPL環境中執行

  本節將介紹如何在REPL環境中執行Python程式,這裡的REPL是Read-Eval-Print Loop的縮寫,是一個簡單的互動式程式設計環境,也可以將Python REPL環境稱為Python控制檯。為了統一,本書後面的章節都稱Python REPL為Python控制檯。

  讀者只需要在Windows命令列工具中執行python命令,即可進入REPL環境。在命令提示符(>>>)後輸入print(“hello world”),按回車鍵,就會在REPL環境中輸出“hello world”,如下圖所示。

image

  如果在Windows下,按Ctrl+Z退出REPL環境,如果在Mac OS X,按Ctrl+D退出REPL環境。

1.3 第一個Python程式

  本節會編寫我們的第一個Python程式。這個程式定義了兩個整數型別的變數n和m,並將兩個變數相加,最後呼叫print函式輸出這兩個變數的和。

(1)讀者可以使用任何一個文字編輯器、Eclipse或PyCharm建立demo.py檔案,並輸入下面的Python程式碼。

n = 20
m = 30
print("n + m =",n + m)

  建議讀者使用Eclipse或PyCharm來建立demo.dy檔案,因為這樣做可以直接在IDE中執行Python程式,並不需要像命令列方式執行Python程式那樣在文字編輯器和Window命令列工具之間來回切換。

(2)執行Python程式

  如果讀者想在Windows命令列工具中執行demo1.py,可以在命令列工具中進入demo1.py所在的目錄,然後執行下面的命令執行demo1.py。

python demo1.py

在命令列工具中執行demo1.py的輸出結果如下圖所示。

image

## 1.4 除錯Python程式

  在開發複雜的Python程式時,如果出現bug(也就是程式中出現的錯誤),就需要對程式進行除錯,以便找出bug對應的程式碼行。除錯程式的方法很多,例如,可以使用print函式在程式的不同位置輸出相應的資訊,以便縮小bug出現的範圍。不過這種方法太原始了,現在普遍使用的方法是通過偵錯程式一步步跟蹤程式碼行,這種方式可以非常方便地找到bug所在的位置。

  由於PyDev是Eclipse外掛,所以除錯Python程式可以使用與除錯Java類似的方式(PyCharm的除錯方法類似)。Eclipse提供了除錯介面,後臺呼叫了各種程式語言的偵錯程式。在除錯Python程式碼時會呼叫Python的偵錯程式。

  用Python偵錯程式除錯Python程式碼的步驟如下:

(1)設定斷點

  設定斷點是除錯程式的過程中必不可少的一步。Python偵錯程式每次遇到斷點時會將當前執行緒掛起,也就是暫停當前程式的執行。

  可以在Python編輯器中顯示程式碼行號的位置雙擊新增或刪除當前行的斷點,或者在當前行號的位置滑鼠右鍵單擊,會顯示如下圖所示的彈出選單。在選單中單擊“Add Breakpoint”選單項,會在當前程式碼行新增斷點。也可以單擊“Disable Breakpoint”選單項,禁用當前行的斷點。如果當前行已經有斷點了,選單中會出現“Remove Breakpoint”選單項,單擊該選單項,會刪除當前行的斷點。

image

新增斷點後的Python編輯器如下圖所示。其中第2行設定了一個斷點。

image

(2)以除錯方式執行Python程式

  在Eclipse中執行分為兩種方式:Release和Debug,也就是發行和除錯。如果只是觀察程式的執行效果,可以選擇Release方式,如果要除錯程式,就需要使用Debug方式。

  Debug按鈕在Eclipse工具欄左側,如圖1-54所示(有一個小爬蟲的按鈕,在Release按鈕的左側)。

image

  現在點選Debug按鈕,就會執行Python程式,如果Python程式沒有設定任何斷點,Debug和Release方式執行的效果是一樣的,都會輸出執行結果。不過用Debug方式執行程式,Eclipse會進入Debug透檢視(Perspective),這裡的透檢視就是Eclipse中將多個相關檢視以一定位置和尺寸放到一起,便於開展工作。Debug透檢視則是將與除錯相關的檢視放到一起,便於除錯。

  如果Python程式中有斷點,當程式執行到斷點處,就會暫停程式,並且在斷點行用綠色背景展示,如下圖所示。

image

(3)觀察除錯資訊

  除錯的主要目的是將程式中的資料展現出來,也就是說,除錯調的就是程式中的資料。因此,通過Python偵錯程式,可以用多種方式觀察Python程式中資料的變化。例如,由於n = 20在m = 30前面,所以在m = 30處中斷後,n = 20肯定是已經執行了,所以可以將滑鼠放到n = 20語句上,這時會在彈出視窗中顯示變數n的資料型別和當前的值,如下圖所示。

image

  在右上角的Variables檢視中也可以觀察變數值的變化情況,如下圖所示。

image

(4)跟蹤除錯程式

  除錯的另一個重要功能是可以一步步跟蹤程式,也就是step into(單獨跳入)和step over(單步跳過)。其中step into可以跟蹤進函式內部,step over並不會跟蹤進函式內部。這兩個功能可以通過點選左上側的兩個按鈕實現,如下圖所示。

image

  現在點選“step over”按鈕,會發現Python程式碼區域m = 30程式碼行執行了,並且綠色背景跑到下一行了,如下圖所示。

image

1.5 實戰與練習

  1. 嘗試修改1.3節的例子,使程式輸出n * m的值。

  2. 嘗試編寫Python程式,分別用“*、+、-、/”四個在四則運算子將兩行字串包圍起來,並Eclipse的Console檢視中輸出如下圖所示的結果。

image

Python技能樹,Get新技能