天天看點

《Python資料科學實踐指南》——2.4節流程控制

本節書摘來自華章社群《python資料科學實踐指南》一書中的第2章,第2.4節流程控制,作者紀路,更多章節内容可以通路雲栖社群“華章社群”公衆号檢視

2.4 流程控制

到目前為止,我們所編寫的程式都是線性的程式,程式中的語句按照順序依次被執行,這樣的程式能實作的功能非常有限,而且還需要編寫大量的代碼,損失了編寫程式執行任務的大部分優勢。事實上,可以使用條件判斷及循環這兩種常用的方式更有效率地編寫程式。

2.4.1 條件判斷

帶有條件判斷的程式又稱為“分支程式”,這樣的程式由如三個部分構成。

一個條件判斷,對一個表達式求值,結果是true或false。

一個代碼塊,如果條件判斷為true,則執行這部分代碼。

一個可選的代碼塊,如果條件判斷為false,則執行這部分的代碼。

這樣的代碼可以執行某些規則的比較,比如下面這段程式:

在上面的程式中,elif語句的後面還可以寫一個條件判斷語句。需要注意的一點是,若elif語句之前的某個if或elif語句不成立, 就不會繼續執行下去了,是以條件判斷的順序很重要。

雖然條件判斷語句增強了我們編寫程式的能力,但還有一個大問題需要解決,那就是如何讓電腦任勞任怨地做我們為其安排的工作,這将會涉及2.2.2節将要介紹的流程控制方法。

2.4.2 循環

python中的循環分為兩種,讓我們先從讀者可能比較熟悉的while循環說起。與條件判斷語句類似,while循環也是由條件判斷語句和代碼塊構成的,示例代碼如下:

上面的代碼是計算5 * 10這個語句的複雜寫法,先不要糾結這些細節,讓我們來看看while循環需要哪些東西。這段程式的本質是将10個5加起來,是以需要循環10次,這一點可以從iters這個變量中确認,而變量ans則用于存儲相加的總和。iters > 0是條件判斷語句,當這個語句的結果為false時,這個循環就會終止。而程式塊中一定要有一個語句用于減少iters的值,即iters -= 1這個語句,以保證循環最終會停止。我們可以在紙上手工計算這個程式,每一次疊代之後ans的值應該是:5,10,15,20,25,30,35,40,45,50。

如果忘記了增加iters -= 1會怎麼樣呢?結果就是這個程式永遠都不會終止,直到整數溢出錯誤發生,是以請一定要多加注意。

python的第二個循環方式是for循環,與其他程式設計語言一樣,for循環是一種比while更簡便的表達方式。雖然用while循環可以實作所有的循環,但是如果類似iters -= 1這樣的語句忘記寫了,或者寫錯了,就會發生死循環。而for循環在很多時候都能避免此類的情況發生,因為for循環實作的出發點就是循環次數是已知的。下面來看一個計算乘法的for循環版本:

在上面的程式中,第一個if中的continue會在ans能在被3整除的時候跳過目前這個循環,是以可以發現在輸出結果中3、6和9不見了。而第二個if語句在使用break語句時如果ans大于10就會跳過整個循環程式塊,即使循環次數沒有達到100次也會跳出。

2.4.3 縮進、空白和注釋

python中不需要用“;”和“{}”來對代碼塊進行分割,而是使用縮進來進行分割。有些初學者在使用文本編輯器時往往沒有注意空格縮進與tab的差別,導緻程式執行出錯,這是需要注意的。而且一旦決定分隔符的空格數就要一直使用相同的空格數作為縮進,通常來說,python官方建議使用4個空格作為分隔符。不幸的是,sublime text 3的預設分割符是tab,讀者可以嘗試在performance>settings-user打開的檔案中插入兩行,以確定換行之後自動插入4個空格的縮進: