python基礎教程:流程控制之for迴圈
迴圈是計算機程式中經常用到的流程。試想一下,如果我們有一萬個資料要處理,每個資料處理的流程都一模一樣,如果我們用順序流程就要把處理流程重複寫一萬遍,是不是很累?而用for迴圈就簡單多了。

for迴圈
for迴圈其實前面講遍歷列表、字典的時候我們就已經遇到了,它的語法很簡單,就是 for item in items
。
下面我們看一下for迴圈:
numbers = [1,2,3,4,5,6] for n in numbers: x = n * n print(x)
for迴圈用來遍歷一個序列是最常用的,有時候並沒有給我們一個現成的序列要遍歷,只是我們的程式需要迴圈特定的次數,這時候我們就用到了 range()
函式。在Python 3.6中, range
並不是一個內建函式,而是一個型別,但是在Python 2.7中它是一個內建函式:
In [134]: range? Init signature: range(self, /, *args, **kwargs) Docstring: range(stop) -> range object range(start, stop[, step]) -> range object Return an object that produces a sequence of integers from start (inclusive) to stop (exclusive) by step.range(i, j) produces i, i+1, i+2, ..., j-1. start defaults to 0, and stop is omitted!range(4) produces 0, 1, 2, 3. These are exactly the valid indices for a list of 4 elements. When step is given, it specifies the increment (or decrement). Type:type Subclasses: In [135]: type(range) Out[135]: type In [136]: len? Signature: len(obj, /) Docstring: Return the number of items in a container. Type:builtin_function_or_method In [137]: range(4) Out[137]: range(0, 4)
上面是Python 3.6中從IPython看到的range的說明,它的Type是type,而不像內建函式len的Type是builtin_function_or_method。
雖然range的型別從Python 2中的內建函式變成了3.6中的type,但並不影響我們對它的使用。假如我們想列印 hi 特定次數,
比如3次,下面就是range的經典用法:
for i in range(3): print('hi')
這裡的 i
並沒有在迴圈中被使用,為了不讓程式碼規範檢查程式(如pylint)報錯“有未使用的變數”,我們可以用下劃線 _
替代
。
range()引數個數的不同也代表了生成不同的序列:
- range(5) 生成從0-4共5個整數序列
- range(1,5) 生成從1開始到5為止但不包含5的整數序列,即1-4
- range(1,5,2) 從1開始到5為止,每次步長為2的整數序列,即:[1,3]
比如,求10以內偶數的和:
sum = 0 for i in range(0, 10, 2): sum += i print(sum)
while 迴圈
while是另外一種形式的迴圈,它的語法如下所示:
while condition: do something
示例程式碼:
a = 3 while a > 0: print(a) a -= 1
上面程式碼迴圈3次,每次會對條件變數a減1,當while發現a不大於0時就會終止迴圈。
如果在迴圈裡面,我們不對a進行改變,會發生什麼?沒錯,會出現死迴圈!你的CPU使用率立馬爆滿100%,滿屏不斷重新整理列印3。死迴圈是程式設計中的大忌,一定要小心哦。
break和continue
break是終止(或叫做“跳出”)整個迴圈;continue是跳過本次迴圈後面的程式碼去執行迴圈的下一次。要理解這兄弟倆,還是看程式碼吧:
for i in range(10): if i < 3: continue if i > 7: break prirnt(i)
這段程式碼的意思是,
如果i<3就continue到下一次的迴圈,continue後面的程式碼不會被執行,所以0,1,2就不會被列印;
如果i>7就break整個迴圈,即跳出迴圈,7後面的8,9也自然不會被列印;
不滿足上面兩個情況的3,4,5,6,7就被列印了。
所以這段程式碼的輸出是:
以上例子是for迴圈的,但break和continue同樣適用於while迴圈。小猿們可以在本節結束後,練習一下while迴圈中的break和continue
迴圈的else
這應該是Python獨有的特性吧,迴圈也可以有else。當迴圈正常結束(沒有break)後,就會執行else程式碼段:
for i in range(3): print(i) else: print('loop ends') for i in range(3): if i > 1: break print(i) else: print('loop ends')
猜猜這段程式碼的輸出吧,如果沒有把握就親自執行一下就明白了。
總結
迴圈是程式中另外一種重要的流程控制,在批量處理資料、伺服器程式中大量使用。
大家在學python的時候肯定會遇到很多難題,以及對於新技術的追求,這裡推薦一下我們的Python學習扣qun:784758214,這裡是python學習者聚集地!!同時,自己是一名高階python開發工程師,從基礎的python指令碼到web開發、爬蟲、django、資料探勘等,零基礎到專案實戰的資料都有整理。送給每一位python的小夥伴!每日分享一些學習的方法和需要注意的小細節
