一般來說,語句依次執(zhí)行 - 例如,函數(shù)中的第一個語句首先執(zhí)行,然后是第二個語句,依次類推。但是有很多時候需要多次執(zhí)行同一段代碼,這就引入了循環(huán)的概念。
編程語言提供了允許更復(fù)雜的執(zhí)行路徑的各種控制結(jié)構(gòu)。
循環(huán)語句允許多次執(zhí)行語句或語句組。下圖說明了一個循環(huán)語句流程結(jié)構(gòu) -

Python編程語言提供以下類型的循環(huán)來處理循環(huán)需求。
| 編號 | 循環(huán) | 描述 |
|---|---|---|
| 1 | while循環(huán) | 在給定條件為TRUE時,重復(fù)一個語句或一組語句。 它在執(zhí)行循環(huán)體之前測試狀態(tài)。 |
| 2 | for循環(huán) | 多次執(zhí)行一系列語句,并縮寫管理循環(huán)變量的代碼。 |
| 3 | 嵌套循環(huán) | 可以使用一個或多個循環(huán)在while或for循環(huán)中。 |
循環(huán)控制語句從正常順序更改執(zhí)行。 當(dāng)執(zhí)行離開范圍時,在該范圍內(nèi)創(chuàng)建的所有自動對象都將被銷毀。
Python支持以下控制語句。
| 編號 | 控制語句 | 描述 |
|---|---|---|
| 1 | break語句 | 終止循環(huán)語句并將執(zhí)行轉(zhuǎn)移到循環(huán)之后的語句。 |
| 2 | continue語句 | 使循環(huán)跳過其主體的剩余部分,并立即重新測試其狀態(tài)以進(jìn)入下一次迭代。 |
| 3 | pass語句 | 當(dāng)語法需要但不需要執(zhí)行任何命令或代碼時,Python中就可以使用pass語句,此語句什么也不做,用于表示“占位”的代碼,有關(guān)實(shí)現(xiàn)細(xì)節(jié)后面再寫 |
下面簡單地看一下循環(huán)控制語句。
迭代器(Iterator)是允許程序員遍歷集合的所有元素的對象,而不管其具體實(shí)現(xiàn)。在Python中,迭代器對象實(shí)現(xiàn)了iter()和next()兩種方法。
String,List或Tuple對象可用于創(chuàng)建Iterator。
list = [1,2,3,4]
it = iter(list) # this builds an iterator object
print (next(it)) #prints next available element in iterator
# Iterator object can be traversed using regular for statement
for x in it:
print (x, end=" ")
or using next() function
while True:
try:
print (next(it))
except StopIteration:
sys.exit() #you have to import sys module for this
發(fā)生器(generator)是使用yield方法產(chǎn)生或產(chǎn)生一系列值的函數(shù)。
當(dāng)一個生成器函數(shù)被調(diào)用時,它返回一個生成器對象,而不用執(zhí)行該函數(shù)。 當(dāng)?shù)谝淮握{(diào)用next()方法時,函數(shù)開始執(zhí)行,直到它達(dá)到yield語句,返回yielded值。 yield保持跟蹤,即記住最后一次執(zhí)行,而第二個next()調(diào)用從前一個值繼續(xù)。
以下示例定義了一個生成器,它為所有斐波納契數(shù)字生成一個迭代器。
#!usr/bin/python3
import sys
def fibonacci(n): #generator function
a, b, counter = 0, 1, 0
while True:
if (counter > n):
return
yield a
a, b = b, a + b
counter += 1
f = fibonacci(5) #f is iterator object
while True:
try:
print (next(f), end=" ")
except StopIteration:
sys.exit()