Python 簡易手冊
單元 23 - for 陳述
關鍵字 (keyword) for 為另一種迴圈 (loop) ,通常用在逐一處理序列 (sequence) 的元素 (element) ,舉例如下
1 2 3 4 5 6 7 8 9 10 11 12 | # 建立資料 items = ["lamp", "desk", "pen"] # 印出資料 for i in items: print(i) # 檔名: for_demo.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
序列是指字串 (string) 、串列 (list) 、序對 (tuple) 等資料型態,其實可迭代的物件都可以用 for 迴圈處理,單元 66 - 迭代器會介紹可迭代的觀念及如何定義迭代器 (iterator) 。
第 5 行, for 之後空一格接上控制變數 (control variable) i ,再空一格接上關鍵字 in , in 後空一格接上串列 (list) 變數 items
4 5 6 | # 印出資料 for i in items: print(i) |
串列變數 items 是在第 2 行建立的,單元 39 - 串列會詳細介紹如何定義串列。
也就是說,每一次執行 for 迴圈就會用變數 (variable) i 取得 items 中的元素,由於 items 的第一個元素是 "lamp" ,所以第一次 i 取得 "lamp" ,然後在底下縮排的部分進行處理,接下來再依序取得 "deck" 與 "pen" 進行處理,這裡都是印出變數 i ,執行結果如下
> python for_demo.py |
lamp desk pen |
> |
for 迴圈的特定是在迴圈之前不需要設定控制變數,而是在關鍵字 for 之後直接命名控制變數的名稱,這樣的優點是 for 迴圈的控制變數只作用於迴圈內,也就是迴圈中的區域變數 (local variable) ,離開迴圈後該控制變數就失去效力。
關鍵字 break 可以直接中斷迴圈,還有另一個關鍵字 continue 可以讓迴圈直接進行下一輪,單元 24 - continue 陳述會介紹如何使用 continue ,單元 25 - break 陳述會介紹如何使用 break 。
關鍵字 for 也用在串列、集合、字典產生元素的綜合運算 (comprehension) ,綜合運算會在單元 43 - 綜合運算詳細介紹。
for 迴圈中可以有另一個 for 迴圈,這叫做巢狀迴圈 (nested loop) ,例如以下程式印出九九乘法表
1 2 3 4 5 6 7 8 9 10 11 | # 印出九九乘法表 for i in range(1, 11): for j in range(1, 11): print(i*j, end=", ") print() # 檔名: for_demo2.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
內建函數 (built-in function) range() 可以產生兩個引數 (argument) 之間的整數數列,例如 1 與 11 ,就是產生從 1 、 2 、 3 、 4 到 10 ,也就是第二個引數前一個數字的整數數列,此例執行結果如下
> python for_demo2.py |
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, |
> |
range() 有三種參數 (parameter) 版本,分別是需要一個引數、兩個引數及三個引數,上例示範兩個引數,如果是一個引數,就是產生從 0 開始到引數減 1 的整數數列,至於三個引數的話,底下會提供三個引數的例子。
參數是定義函數 (function) 時提供的識別字,呼叫函數提供的實際數值 (value) 叫做引數,單元 44 - 函數與 return 陳述會詳細介紹如何定義函數。
for 迴圈的最後可以加上 else ,作為迴圈執行的預設選項,例如
1 2 3 4 5 6 7 8 9 10 11 12 | # 印出 10 到 1 之間的整數 for i in range(10, 0, -1): print(i) # 迴圈的預設選項 else: print("End") # 檔名: for_demo3.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
第 2 行,這裡用到 range() 的三個參數版本,第一個引數 10 是數列開始值,第二個引數 0 是數列結束值,至於第三個引數是 -1 ,所以會以減 1 的方式進行,最後到 0 的前一個數字 1 為止
1 2 | # 印出 10 到 1 之間的整數 for i in range(10, 0, -1): |
第 5 行是 else 的部分,也就是迴圈結束後依定會執行的預設項目
4 5 6 | # 迴圈的預設選項 else: print("End") |
此例執行結果如下
> python for_demo3.py |
10 9 8 7 6 5 4 3 2 1 End |
> |
參考資料
- https://docs.python.org/3/reference/compound_stmts.html#the-for-statement
- https://docs.python.org/3/tutorial/controlflow.html#for-statements