python教程 五 流程控制

2021-09-20 06:39:28 字數 3832 閱讀 6801

if語句用於有條件的執行,if語句執行有個特點,它是從上往下判斷,如果在某個判斷上是true,把該判斷對應的語句執行後,就忽略掉剩下的elifelse

while語句用於在表示式保持為真的情況下重複地執行,這將重複地檢驗表示式,並且如果其值為真就執行第乙個子句體;如果表示式值為假(這可能在第一次檢驗時就發生)則如果else子句體存在就會被執行並終止迴圈。。

for語句用於對序列(例如字串、元組或列表)或其他可迭代物件中的元素進行迭代

表示式列表會被求值一次;它應該產生乙個可迭代物件。 系統將為expression_list的結果建立乙個迭代器,然後將為迭代器所提供的每一項執行一次子句體,具體次序與迭代器的返回順序一致。當所有項被耗盡時 (這會在序列為空或迭代器引發stopiteration異常時立刻發生),else子句的子句體如果存在將會被執行,並終止迴圈。

註解

當序列在迴圈中被修改時會有乙個微妙的問題(這只可能發生於可變序列例如列表中)。 會有乙個內部計數器被用來跟蹤下乙個要使用的項,每次迭代都會使計數器遞增。 當計數器值達到序列長度時迴圈就會終止。 這意味著如果語句體從序列中刪除了當前(或之前)的一項,下一項就會被跳過(因為其標號將變成已被處理的當前項的標號)。 類似地,如果語句體在序列當前項的前面插入乙個新項,當前項會在迴圈的下一輪中再次被處理。 這會導致麻煩的程式錯誤,避免此問題的辦法是對整個序列使用切片來建立乙個臨時副本,例如

try語句可為一組語句指定異常處理器和/或清理**

except子句指定乙個或多個異常處理器。 當try子句中沒有發生異常時,沒有異常處理器會被執行。 當try子句中發生異常時,將啟動對異常處理器的搜尋。 此搜尋會依次檢查 except 子句,直至找到與該異常相匹配的子句。 如果存在無表示式的 except 子句,它必須是最後乙個;它將匹配任何異常。 對於帶有表示式的 except 子句,該表示式會被求值,如果結果物件與發生的異常「相容」則該子句將匹配該異常。 乙個物件如果是異常物件所屬的類或基類,或者是包含有相容該異常的項的元組則兩者就是相容的。

如果在對 except 子句頭中的表示式求值時引發了異常,則原來對處理器的搜尋會被取消,並在周邊**和呼叫棧上啟動對新異常的搜尋(它會被視作是整個try語句所引發的異常)。

當找到乙個匹配的 except 子句時,該異常將被賦值給該 except 子句在as關鍵字之後指定的目標,如果存在此關鍵字的話,並且該 except 子句體將被執行。 所有 except 子句都必須有可執行的子句體。 當到達子句體的末尾時,通常會轉向整個 try 語句之後繼續執行。 (這意味著如果對於同一異常存在有巢狀的兩個處理器,而異常發生於內層處理器的 try 子句中,則外層處理器將不會處理該異常。)

當使用as將目標賦值為乙個異常時,它將在 except 子句結束時被清除。 這就相當於

被轉寫為

如果存在finally,它將指定『清理』處理器。try子句會被執行,包括任何exceptelse子句。 如果在這些子句中發生任何未處理的異常,該異常會被臨時儲存。finally子句將被執行。 如果存在被儲存的異常,它會在finally子句的末尾被重新引發。 如果finally子句引發了另乙個異常,被儲存的異常會被設為新異常的上下文。 如果finally子句執行了returnbreak語句,被儲存的異常會被丟棄:

函式的返回值是由最後被執行的return語句所決定的。 由於finally子句總是被執行,因此在finally子句中被執行的return語句總是最後被執行的

with語句用於包裝帶有使用上下文管理器 (參見 with 語句上下文管理器 一節) 定義的方法的**塊的執行。這允許對普通的try...except...finally使用模式進行封裝以方便地重用。上下文管理器的典型用法包括儲存和恢復各種全域性狀態,鎖定和解鎖資源,關閉開啟的檔案等等。

帶有乙個「專案」的with語句的執行過程如下:

對上下文表示式 (在with_item中給出的表示式) 求值以獲得乙個上下文管理器。

載入上下文管理器的__exit__()以便後續使用。

發起呼叫上下文管理器的__enter__()方法。

如果with語句中包含乙個目標,來自__enter__()的返回值將被賦值給它。

註解with語句會保證如果__enter__()方法返回時未發生錯誤,則__exit__()將總是被呼叫。 因此,如果在對目標列表賦值期間發生錯誤,則會將其視為在語句體內部發生的錯誤。 參見下面的第 6 步。

執行語句體。

發起呼叫上下文管理器的__exit__()方法。 如果語句體的退出是由異常導致的,則其型別、值和回溯資訊將被作為引數傳遞給__exit__()。 否則的話,將提供三個none引數。

如果語句體的退出是由異常導致的,並且來自__exit__()方法的返回值為假,則該異常會被重新引發。 如果返回值為真,則該異常會被抑制,並會繼續執行with語句之後的語句。

如果語句體由於異常以外的任何原因退出,則來自__exit__()的返回值會被忽略,並會在該類退出正常的發生位置繼續執行。

如果有多個專案,則會視作存在多個with語句巢狀來處理多個上下文管理器:

等價於參考

python教程 控制流程

一 控制流程用到的運算子 1.身份運算子 is 比較的時物件id,也即是cpython中的位址 2.成員運算子 in 判斷物件是否時某個容器中的值 3.比較運算子 4.邏輯運算子 按優先順序公升序排列 二 判斷語句 1.if語句 條件成立執行 當要進行使用者資訊匹配時,要求使用者輸入使用者名稱和密碼...

python流程控制 python之流程控制

電腦程式在解決某個具體問題時,包括三種情形,即順序執行所有的語句 選擇執行部分的語句和迴圈執行部分語句,這正好對應著程式設計中的三種程式執行結構流程 順序結構 選擇結構和迴圈結構。事實證明,任何乙個能用計算機解決的問題,只要應用這三種基本結構來寫出的程式都能解決。python語言當然也具有這三種基本...

五流程控制函式

五流程控制函式 1.if函式 if else 的效果 select if 10 5,大 小 select last name,commission pct,if commission pct is null,沒將金,哈哈 有將金,嘻嘻 備註 from employees 2.case 函式的使用一,...