除了 while,這章節還會介紹一些 Python 的陳述式語法。
最常見的陳述式種類是 if 。舉例來說:我輸入以下程式碼
再空格中輸入一個數字後,就會顯示 more
在陳述式中,可以沒有或有許多個 elif 敘述,且 else 敘述並不是必要的。關鍵字 elif 是「else if」的縮寫,用來避免過多的縮排。一個 if ... elif ... elif ... 序列可以用來替代其他程式語言中的 switch 或 case 陳述式。
如果你要將同一個值與多個常數進行比較,或者檢查特定的型別或屬性,你可能會發現 match 陳述式也很有用。更多的細節,請參閱 match 陳述式。
在 Python 中的 for 陳述式有點不同於在 C 或 Pascal 中的慣用方式。相較於只能疊代 (iterate) 一個等差數列(如 Pascal),或給予使用者定義疊代步驟與終止條件(如 C),Python 的 for 陳述式疊代任何序列(list 或者字串)的元素,順序與它們出現在序列中的順序相同。例如(無意雙關):
在疊代一個集合的同時修改該集合的內容,很難獲取想要的結果。比較直觀的替代方式,是疊代該集合的副本,或建立一個新的集合:
如果你需要疊代一個數列的話,使用內建 range() 函式就很方便。它可以生成一等差數列:
給定的結束值永遠不會出現在生成的序列中;range(10) 生成的 10 個數值,即對應存取一個長度為 10 的序列內每一個項目的索引值。也可以讓 range 從其他數值開始計數,或者給定不同的公差(甚至為負;有時稱之為 step):
欲疊代一個序列的索引值,你可以搭配使用 range() 和 len() 如下:
然而,在多數的情況,使用 enumerate() 函式將更為方便,詳見迴圈技巧。
如果直接印出一個 range 則會出現奇怪的輸出:
在很多情況下,由 range() 回傳的物件表現得像是一個 list(串列)一樣,但實際上它並不是。它是一個在疊代時能夠回傳所要求的序列中所有項目的物件,但它不會真正建出這個序列的 list,以節省空間。
我們稱這樣的物件為 iterable(可疊代物件),意即能作為函式及架構中可以一直獲取項目直到取盡的對象。我們已經了解 for 陳述式就是如此的架構,另一個使用 iterable 的函式範例是 sum():
我們可以看到更多回傳 iterable 和使用 iterable 為引數的函式。在資料結構章節中,我們會討論更多關於 list() 的細節。