本節書摘來自華章出版社《python資料科學實踐指南》一書中的第2章,第2.1節,紀路 著,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
為了開啟我們的資料科學之旅,本章會進行一些基礎的程式設計訓練。第1章中已經搭建好了python的運作環境,讀者應該已經能夠在python shell中執行簡單的列印和四則運算了。接下來我們要完整地學習一遍構成一個python程式的基本要素。
本節會介紹一些學習python前應當掌握的基礎知識,這一部分内容在所有的程式設計語言學習中基本上都是類似的,python當然也遵守這些通用的規則,熟悉這些内容的讀者可以跳過這一節。
首先,需要明确的是,在python中,所有的元素都是“對象”。“對象”是計算機科學中的一個術語,本書以後的章節會對其進行介紹,現在讀者隻需要将對象等同于“東西”就好了。既然是一種東西,那麼就要對其進行分類,所有對象都要歸屬于某個“類型”,比如貓屬于動物,電視屬于電器,床屬于家具等。從這個比喻來看,對象是一個具體的事物,而類型則是一個抽象的分類,并且同一類型的東西總是有很多相似之處,比如動物需要吃東西,可以自由移動,或者趴在你的鍵盤上妨礙你打字(開玩笑的)。雖然本章并不打算介紹“面向對象”,但還是想強調一下“對象”是python程式處理的核心事物,而且每個對象都有它所歸屬的類型,最終會由類型決定python程式可以對這個對象做什麼。
python有如下5種基本的資料類型。
none:這個類型表示什麼都沒有,這是一個特殊的類型,并且也僅有none這一個對象。
int:表示整數的類型,比如1、2、3、4這樣的數字就是int型,當然,負數–1、–2、
–3、–4等也都在int的範圍之内,範圍等同于數學定義中的整數。
float:代表浮點數,比如1.2,4.5或–72.1,當所要表達的數字過大或過小時可能會用科學計數法來表示,比如1.6e11代表1.6×1011這樣的大數。而且1.0或–2.0這樣的數也叫作浮點數,雖然它們的值與去掉小數點及後面的0之後的值看起來是相等的,但是它們是不同的類型,python程式可以對它們做的事情也不一樣。比如下面這一小段程式:
bool:表示布爾類型的值,可能有的讀者聽說過布爾值隻有兩個,非0即1,在python中使用false代表0,true代表1,上面的一小段代碼試圖判斷2與2.0之間值的大小時,python程式的結果是true,而在判斷2是不是2.0時傳回的卻是false。
str:代表字元串類型,比如“hello world”就是一個str類型。嚴格來說,在python 2中還有一個unicode類型幾乎與str類型沒有任何差別。并且str類型也不是原子類型,而是由多個字元組成的序列類型。實際上str類型并不是基礎資料類型,可實際上幾乎沒有程式能夠完全不使用字元串類型的對象(即使是第1章中的示例程式,也用到了字元串類型的對象,那個時候讀者也許還不知道什麼是對象,就已經知道“hello world”是字元串了),是以這裡将str劃為基礎資料類型。
現在,我們已經介紹了python的5個基本類型,接下來就讓我們對它們做一些事情。
在python中我們可以随意為對象起一個名字,甚至起好幾個名字,比如下面的語句:
第一條語句用于将字面量為6.4855的浮點型對象指派給usd_to_cny變量;第二條語句是通過變量usd_to_cny将6.4855傳遞給了另外一個變量dollar_rate;第三條語句則是前兩條的合體。這裡需要強調的是,在python裡所有的指派操作都是起一個别名,對象還是最原始的對象,這種方式叫作引用傳遞。python中有一個id()方法,可以将某個對象在python内部的唯一編号列印出來,為了證明這一點,一起來看一下下面的代碼及輸出:
可以看到無論是原始的變量還是它的兩個别名,它們的對象id都是相同的。如果我們為一個變量重新指派,那麼與這個變量對應的對象id就會改變,比如:
雖然,變量僅僅是一個名字,但是想起一個好的名字并不容易。真正的程式員在工作中無時無刻不面臨着如何給某個對象找一個簡單直白的名字,如果起了一個有誤導性質的名字,結果很可能是災難性的。比如,一個粗心的程式員将美元匯率(usd)寫成了歐元匯率(eur),那麼這家公司可能會因為給顧客兌換更多的人民币而破産。python的書寫規範(epe8)中,詳細地規定了該如何書寫名稱,本書僅做一些必要的約定:名稱應該是能表達實際含義的名詞,由字母、數字及下劃線組成,但不能以數字開頭。還要注意的是,不要使用python的保留字,因為這些單詞是程式得以順利執行的基礎,它們有一些特定的含義,以下是python 2.7中的保留字:
關于指派,最後還有一點需要說明,即python支援多重指派,如果讀者有過c/c++程式設計的經驗,可能對下面的語句不會陌生:
在比較有曆史的程式設計語言裡,要交換兩個變量的值隻能通過一個中間變量來實作,而在python中可以友善地寫成:
在python中這種指派方式稱為列解包,後這将會在講解序列類型時再次提及序列解包。
2.1.3 操作符及表達式
python中有一系列的操作符,操作符可用來連接配接兩個對象的符号,比如“+”号操作符連接配接兩個數字就可以組成一個表達式,而且表達式的值也是對象,下面列出了python的全部操作符:
算術操作符:用來進行算術操作。值得注意的是,python中的算術操作符是自動重載的,對于int類型的兩個對象,“+”代表求和。而對于str類型的兩個對象,“+”就會變成連接配接兩個字元串,比如:
對于該符号,本章後面講解字元串時會做進一步講解。
位操作符:python的位操作符是進行位運算的,比如将一個整數右移的計算“1234 >> 1”,因為本書并不會涉及位運算,感興趣的讀者可以自己找一些資料來學習。
比較操作符:這個操作符就很好了解了,不過值得注意的是,比較操作符也是經過重載的,在比較字元串的類型時,是按照字母的字典順序進行比較的,比如“a”< “b”。含有比較操作符的表達式,其表達式的值是布爾型,比較條件成立時為true ,不成立時為false。
邏輯操作符:and表示操作符兩側的值(表達式的值或對象的值)全部等同于true時,結果就是true。or隻需要操作符兩側的值有一個為true就為true 。not就如字面意思一樣,會逆轉ture和false的值,比如not true的結果是false,反之亦然。
最後,需要注意的是,程式設計與數學計算一樣,操作符是有優先級的,比如号就要優先于+運算,實際的處理辦法也與數學中的相同,可以使用圓括号()來将想要優先運算的部分括起來。比如(1 + 2)3就會先計算加法再計算乘法。
使用python的互動式指令行是非常便捷的程式設計方式,但是當需要編寫的程式比較多時,程式員應使用更好的工具來管理代碼。為簡便起見,本章暫時還不會介紹ide(integrated development environment,內建開發環境),剛入門程式設計的讀者最好還是從普通的純文字編輯器開始入手。
可能有不少讀者常用的編輯文本的軟體是office world、windows記事本,或者mac上的pages、備忘錄,又或者是跨平台的印象筆記等。這些軟體可以叫作文本編輯器,但是卻不能叫作純文字編輯器。因為這些軟體為了友善排版,除了實際顯示的文本之外,還有很多特殊的隐藏字元用來表示格式。任何代碼檔案都應當以純文字的方式來儲存,是以這裡推薦兩款适用于程式設計的純文字編輯器—sublime text 3和notepad++。
sublime text 3
sublime text 3是首選,這是一款免費的、跨平台的純文字編輯軟體,在mac os x、windows、linux裡都有對應的版本,圖2-1是sublime text 3運作時的截圖。

從圖2-1中可以看到,python代碼的不同部分被标注成了不同的顔色,這是因為我将檔案儲存成example.py的檔案了。“.py”是python程式的擴充名,正确的python程式必須以.py結尾,這樣編輯器和python解釋器才能夠正确識别。
notepad++
notepad++是一款專門為windows設計的純文字編輯器,同樣也是免費的,而且有一批忠實的使用者在使用,有興趣的讀者可以去了解一下,圖2-2是notepad++的軟體界面。
以上兩個軟體的功能很相似,都能夠滿足我們目前的需求,安裝方式也與其他應用程式的安裝方式一緻,這裡就不再贅述了。再提醒一次,使用windows的使用者一定不要使用windows記事本打開python程式檔案,因為記事本會向純文字檔案每一行的末尾插入一個windows特有的标記,平時看不見,但它會導緻程式運作失敗。
在安裝編輯器之後,輸入适當的python代碼,儲存為以“.py”結尾的python程式檔案之後,就可以通過在指令行中輸入“python+程式檔案路徑”的方式運作了,在mac os x中的截圖如圖2-3所示。
在windows中的截圖如圖2-4所示。
通常,python程式檔案的頭部會添加兩行特殊的字元串,如代碼清單2-1所示。
代碼清單2-1:example.py
其中第一行在windows系統當中沒有意義,這是專門給python代碼在mac os x或linux上運作的使用者使用的。第二行對于非英文使用者是比較關鍵的,它說明了程式檔案是以utf-8編碼儲存的,中文和其他非ascii字元的文字需要以這種方式儲存在python程式中。另外由于python shell隻能輸入ascii字元,是以通過編寫python程式檔案也可以實作對中文的處理,比如代碼清單2-2。
代碼清單2-2:hello.py
在mac os x終端上執行之後的結果是:
windows指令行執行的指令是“python c:usersjiludesktophello.py”,在本書以後的章節裡,如果提到運作python程式,則表示是在終端或指令行中使用python指令調用代碼清單,我會直接給出代碼清單和運作結果,而省略運作的步驟。
這裡還有一些小技巧可以幫助讀者快速地輸入代碼清單的存儲路徑,即無論在何種作業系統下,都可以通過滑鼠拖曳代碼清單的檔案到指令行裡,指令行中會自動打出該檔案的路徑,之後就隻需要再補充python指令即可。