本節書摘來自異步社群《python 3程式開發指南(第2版•修訂版)》一書中的第1章,第1.4節,作者[英]mark summerfield,王弘博,孫傳慶 譯,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
在本章中,我們學習了如何編輯并運作python程式,并講解了幾個雖然短小但完整的程式。本章的大部分在于講解足以編寫實際python程式的8個要素——python的“關鍵要素”。
我們從python最基本的兩個資料類型int與str開始。整數的編寫就像在大多數其他程式設計語言中一樣,字元串的編寫需要使用單引号或雙引号——隻要字元串兩端是同樣的引号類型即可。我們可以在字元串與整數之間進行轉換,比如int("250")與str(125)。如果轉換整數失敗,就會産生valueerror參數,而幾乎所有對象都可以轉換為字元串。
字元串也是序列,是以,那些可用于序列的函數與操作也可以用于字元串。例如,我們可以使用資料項存取操作符([])存取某個特定的字元,使用符号+連接配接字元串,使用+=追加字元串——由于字元串是固定的,是以,這裡的追加操作實際上建立了一個新字元串,該字元串實際上是将給定的字元串連接配接在一起,并将左邊字元串的對象引用重綁定到新字元串。我們也可以使用for…in循環來對字元串進行逐個字元的疊代。我們可以使用内置的len()函數統計一個字元串中包含多少個字元。
對于固定的對象,比如字元串、整數與元組,我們可以編寫自己的代碼,就像對象引用是一個變量一樣,也就是說,就像對象引用是其引用的對象本身。我們也可以對可變的對象做類似的事情,盡管對可變的對象的任何改變都會影響到該對象的所有出現(對該對象的所有對象引用),我們将在第3章中進行講解。
python提供了幾種内置的組合資料類型,其标準庫中還包含其他幾種類型。我們學習了list與tuple這兩種資料類型,尤其是學習了如何從字面上建立元組與清單,比如,even = [2, 4, 6, 8]。與python中的其他對象一樣,清單也是對象,是以我們可以在其上進行方法調用,比如,even.append(10)将向清單中添加一個額外的資料項。與字元串類似,清單與元組也是序列,是以,我們可以使用for…in循環在其上進行逐項疊代,也可以使用len()函數計算其包含多少個資料項。使用資料項存取操作符([]),我們可以取回清單或元素中的某個特定項;使用+,可以連接配接兩個清單或元組;使用+=,可以把某個清單或元組附加到另一個上。如果我們需要将一個單獨的資料項添加到清單,就必須使用list.append()或+= 将該項添加到清單中,使其變為一個單項目清單,比如even += [12]。由于清單是可變的,是以我們可以使用[]改變單個資料項,比如,even[1]=16。
is與is not這兩個身份操作符可以用于檢測兩個對象引用是否引用了相同的對象——在檢測内置的none對象時,這兩個操作符尤其有用。所有常見的比較操作符都可以使用(<, <=, ==, !=, >=, >),但是隻能用于相容的資料類型,并且要求資料類型支援該操作符。到目前為止我們看到的資料類型(包括int、str、list與tuple)都支援比較操作符的全集。對不相容的資料類型進行比較,比如,将int與str或list進行比較,将很直覺地産生一個typeerror異常。
python支援标準的邏輯操作符and、or與not。and與or都是“短路”操作符,傳回的是決定結果的操作數——這可能并非布爾類型值(盡管可以轉換為布爾類型值),not總是傳回true或false。
利用in與not in操作符,可以測試序列類型的成員關系,包括字元串、清單與元組等。進行成員關系測試時,對清單與元組使用的是較慢的線性搜尋,對字元串使用的則是可能更快的混合搜尋算法。不過,除非字元串、清單或元組非常長,一般情況下性能很少會成為問題。在第3章中,我們将學習python的關聯數組與集合等組合資料類型,這些資料類型都提供了非常快的成員關系測試功能。使用type()函數,也可能判斷對象變量的類型(也就是說,對象引用實際引用的對象的類型),但這一函數通常隻用于調試與測試過程。
python提供了幾種控制結構,包括條件分支(if…elif…else)、條件循環(while)、序列上的疊代(for…in)與異常處理(try…except塊)等。while循環與for…in循環都可以使用break語句貿然地終止,也都可以使用continue語句将控制流轉向循環的開始。
python支援常見的算術操作符,包括+、-、、/等四則運算,不過python的不同之處在于,/操作符總是産生一個浮點值結果(即便兩個操作數都是整數)。(很多其他程式設計語言使用的截取除法在python中也支援,不過其操作符是//。)python也提供了增強的指派操作符,比如+=與=,如果左邊的操作數是固定的,這類操作符實際上就建立一個新對象,并進行重新綁定。此外,前面也已說明,str與list資料類型對算術運算操作符進行了重用。
通過input()函數與print()函數,可以實作控制台i/o。通過在控制台中使用檔案重定向,可以使用同樣的内置函數讀、寫檔案。
python除了提供豐富的内置功能之外,還提供了廣泛的标準庫,在使用import語句進行導入操作後,就可以使用子產品中的函數。sys子產品是一個很常見的需要導入的子產品,其中存放了sys.argv清單(指令行參數)。如果python不能提供我們需要的函數,可以使用def語句很容易地建立一個完成所需功能的函數。
利用本章中講解的知識與技術,可以編寫短小但有用的python程式。在接下來的章節中,我們将學習關于python資料類型的更多知識,對ints與strs進行更深入的講解,并介紹一些全新的資料類型。之後,在第4章中,将詳細講解python的控制結構,并介紹如何建立自己的函數,以便将相關功能進行包裝,促進代碼重用,防止重複工作。