第十三章、while和for循環(huán)

while語句,提供了編寫通用循環(huán)的一種方法;for語句,用它來遍歷序列對象內(nèi)的元素,并對每個元素運行一個代碼塊。

while循環(huán)

while語句是Python語言中最通用的迭代結構。簡而言之,只要頂端測試一直計算到真值,就會重復執(zhí)行一個語句塊(通常有縮進)。

1、一般格式:

while語句最完整的輸出格式是:首行以及測試表達式、有一列或多列縮進語句的主體以及一個可選的else部分(控制權離開循環(huán)而又沒有碰到break語句時會執(zhí)行)。

2、例子:

3、break、continue、pass和循環(huán)else:

break:跳出最近所在的循環(huán)(跳過整個循環(huán)語句)。

continue:跳到最近所在循環(huán)的開頭處(來到循環(huán)的首行)。

pass:什么事也不做,只是空占位語句。

循環(huán)else塊:只有當循環(huán)正常離開時才會執(zhí)行(也就是沒有碰到break語句)。

4、一般循環(huán)格式:

break和continue可以出現(xiàn)在while(或for)循環(huán)主體的任何地方,但通常會進一步嵌套在if語句中,根據(jù)某些條件來采取對應的操作。

①、pass:

pass語句是無運算的占位語句,當語法需要語句并且還沒有任何實用的語句可寫時,可以使用它。

②、continue:

continue語句會立即跳到循環(huán)的頂端。

③、break:

break語句會立刻離開循環(huán)。

④、循環(huán)else:

和循環(huán)else子句結合時,break語句通??梢院雎云渌Z言中所需的搜索狀態(tài)標志位。

⑤、關于循環(huán)else分句的更多內(nèi)容:

簡而言之,循環(huán)else分句提供了常見的編寫代碼的明確語法:這是編寫代碼的結構,讓你捕捉循環(huán)的“另一條”出路,而不是通過設定和檢查標志位或條件。

for循環(huán)

for循環(huán)在Python中是一個通用的序列迭代器:可以遍歷任何有序的序列對象內(nèi)的元素。

1、一般格式:

Python for循環(huán)的首行定義了一個賦值目標(或一些目標),以及你想遍歷的對象。首行后面是你想重復的語句塊(一般都有縮進)。

2、例子:

①、基本應用:

for循環(huán)可以遍歷任何一種序列對象。

②、其他數(shù)據(jù)類型:

任何序列都適用for循環(huán),因它是通用的工具。

③、在for循環(huán)中的元組賦值:

如果迭代元組序列,循環(huán)目標本身實際上可以是目標元組。

④、Python3.0在for循環(huán)中擴展的序列賦值:

由于for循環(huán)中的循環(huán)變量真的可以是任何賦值目標,在這里,我們也可以使用Python3.0的擴展序列解包賦值語法,來提取序列中的序列的元素和部分。

⑤、嵌套for循環(huán):

編寫循環(huán)的技巧

for循環(huán)包括多數(shù)計數(shù)器的循環(huán)。

Python提供了兩個內(nèi)置函數(shù),在for循環(huán)內(nèi)定制迭代:

①、內(nèi)置range函數(shù)返回一系列連續(xù)增加的整數(shù),可以作為for中的索引。

②、內(nèi)置zip函數(shù)返回并行元素的元組的列表,可用于在for循環(huán)內(nèi)遍歷數(shù)個序列。

1、循環(huán)計數(shù)器:while和range:

range函數(shù)是通用的工具,可用在各種環(huán)境下。一個參數(shù)時,range會產(chǎn)生從零算起的整數(shù)列表,但其中不包括該參數(shù)的值。如果傳進兩個參數(shù),第一個將視為下邊界。第三個選用參數(shù)可以提供步進值。

2、非完備遍歷:range和分片:

使用range唯一的真正優(yōu)點是——它沒有復制字符串,并且不會在Python3.0中創(chuàng)建一個列表,對于很大的字符串來說,這會節(jié)省內(nèi)存。

3、修改列表:range:

可以使用range和for的組合的常見場合就是在循環(huán)中遍歷列表時并對其進行修改。

4、并行遍歷:zip和map:

內(nèi)置的zip函數(shù)讓我們使用for循環(huán)來并行使用多個序列。

①、Python2.6中的map等價形式:

在Python2.X中,相關(較舊)的內(nèi)置map函數(shù),用類似方式把序列的元素配對起來,但是如果參數(shù)長度不同,則會為較短的序列用None補齊(而不是按照最短的長度截斷)。Python3.0不再支持該函數(shù)。

②、使用zip構造字典:

將列表變成字典的一種做法就是將這些字符串zip起來,并通過for循環(huán)并行步進處理。在Python2.2和后續(xù)版本中,你可以完全跳過for循環(huán),直接把zip過的鍵和值列表傳給內(nèi)置的dict構造函數(shù)。

5、產(chǎn)生偏移和元素:enumerate:

enumerate函數(shù)返回一個生成器對象:這中對象支持下一章將要學習的迭代協(xié)議,本書下一部分會再深入討論迭代協(xié)議。簡而言之,這個對象有一個__next__方法,由下一個內(nèi)置函數(shù)調(diào)用它,并且循環(huán)中每次迭代的時候它會返回一個(index,value)的元組。

本章小結

在本章中,我們探索了Python的循環(huán)語句以及一些和Python循環(huán)有關的概念。我們深入討論while和for循環(huán)語句,學習其相關的else分句。我們也研究過break和continue語句,而它們只在循環(huán)中才有意義,并且介紹了幾個再for循環(huán)中常用的內(nèi)置工具,包括range、zip、map和enumerate(盡管它們在Python3.0中的角色是迭代器,并且下一章才會正式介紹迭代器的概念)。


最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容