3.6 Python復合陳述句
復合陳述句是包含其它陳述句(陳述句組)的陳述句;它們會以某種方式影響或控制所包含其它陳述句的執行,通常,復合陳述句會跨越多行,雖然在某些簡單形式下整個復合陳述句也可能包含于一行之內,
if、while和for陳述句用來實作傳統的控制流程構造,try陳述句為一組陳述句指定例外處理和/和清理代碼,而with陳述句允許在一個代碼塊周圍執行初始化和終結化代碼,
函式和類定義在語法上也屬于復合陳述句,
一條復合陳述句由一個或多個子句組成,一個子句則包含一個句頭和一個句體,特定復合陳述句的子句頭都處于相同的縮進層級,
每個子句頭以一個作為唯一標識的關鍵字開始并以一個冒號結束,
子句體是由一個子句控制的一組陳述句,子句體可以是在子句頭的冒號之后與其同處一行的一潭訓由分號分隔的多條簡單陳述句,或者也可以是在其之后縮進的一行或多行陳述句,只有后一種形式的子句體才能包含嵌套的復合陳述句,
3.6.1 if 陳述句
if 陳述句用于有條件地執行,if陳述句的一般語法格式如下:
if 條件運算式:
子句體1
[elif 條件運算式:
子句體2]* # *號代表該字句可以是0或多個,下同
[else:
子句體3]
if陳述句通過對條件運算式進行求值,如果為真則執行相應的子句體,如果全都為假,可選的else子句體將會被執行,
注意:
1、False、None、0、""、()、[]、{}`都視為假
3.6.2 while 陳述句
while 陳述句用于在運算式保持為真的情況下重復地執行,一般語法格式為:
while 條件運算式:
子句體1
[else:
子句體2]
while陳述句會重復地檢驗運算式,并且如果其值為真就執行子句體1;如果運算式值為假(這可能在第一次檢驗時就發生),則可選的else子句體將會被執行,
如果在第一個子句體中使用了break陳述句,則將終止回圈且不執行 else 子句體,
如果在第一個子句體中使用了continue 陳述句,則在執行時將跳過子句體中的剩余部分并回傳檢驗運算式,
示例:求1-100整數的和
b = 0
s = 0
while b < 100:
b += 1
s += b
print(s)
5050
實體:判斷某個數是否是質數?
num = 87
i = 2
while i < num:
if num % i == 0:
print(f'{num} 不是質數')
break
i += 1
else:
print(f'{num} 是質數')
87 不是質數
3.6.3 for 陳述句
for 陳述句用于對序列(例如字串、元組或串列)或其他可迭代物件中的元素進行迭代,一般語法格式為:
for 變數 in 序列:
子句體1
[else:
子句體2]
for陳述句會每次從序列中拿一個元素出來并賦值給變數,然后執行子句體1,當序列中所有的元素都獲取完畢后,則可選的else子句體將會被執行,
和While陳述句一樣,如果在子句體1中使用了break陳述句,則將終止回圈且不執行 else 子句體,
如果在子句體1中使用continue 陳述句,則在執行時將跳過子句體中的剩余部分并回傳檢驗運算式,如果此時沒有下一項,則會執行else子句體(如果存在else子句的話),
示例
langs = ['c', 'c++', 'python', 'java']
for i in langs:
print(i)
c
c++
python
java
說明:
1、for 回圈會對目標串列中的變數進行賦值,這將覆寫之前對這些變數的所有賦值,包括在 for 回圈體中的賦值,所以我們不能通過修改回圈變數的值來達到修改回圈次數的目的,
for i in [1, 2, 3]:
print(i)
i = 5
1
2
3
2、在使用for回圈中,回圈變數名最好用_開頭的變數名,甚至直接就用_這樣的變數名,這樣就不會和外部變數名稱沖突,
3、for回圈經常搭配range函式使用,range函式可以生成一系列的整型數字,比如:range(5)可以生成:0,1,2,3,4,有關range函式的介紹,我們將在函式章節詳細介紹,
3.6.4 try 陳述句
try陳述句可以用來捕獲一組陳述句中指定的例外并處理,也可以用來清理代碼,try陳述句有兩種語法格式,
格式一:用來清理代碼
try:
子句體1
finally:
子句體2
子句體1中的陳述句將會一條一條的執行,如果某條陳述句報錯,則跳過子句體1中剩下的其他陳述句,直接執行子句體2中的陳述句,
格式二:用來捕獲例外并處理
try:
子句體1
[except 例外1: 或 except (例外1, 例外2):
子句體2]*
[else:
子句體3]
[finally:
子句體4]
陳述句塊1中的陳述句將會一條一條的執行,如果某條陳述句報錯,則跳過陳述句塊1中剩下的其他陳述句,然后根據例外原因到except陳述句中匹配例外,如果匹配到了,則執行相應的陳述句塊2中的陳述句,
如果try子句中的陳述句塊1沒有引發例外,也沒有執行return、continue或break陳述句,那么可選的else子句將會被執行,并且else子句中的例外不會被except子句捕獲并處理,
而無論情況如何,finally子句體在try陳述句結束前總會被執行,
1、可以通過sys.exc_info()來訪問例外的詳細資訊,回傳一個 3 元組,由例外類、例外實體和回溯物件組成,如下:
import sys
print(sys.exc_info())
try:
5 + '5'
except:
print(sys.exc_info())
(None, None, None)
(<class 'TypeError'>, TypeError("unsupported operand type(s) for +: 'int' and 'str'"), <traceback object at 0x000001564D162700>)
2、可以使用except:或者except Exception,因為在Python中所有的例外都是Exception例外的子類,如下:
try:
1/0
except Exception:
print('出錯啦~')
出錯啦~
3、可以使用as關鍵字獲取到出錯的原因,如下:
try:
1/0
except Exception as err:
print(f'出錯啦~,出錯原因:{err}')
出錯啦~,出錯原因:division by zero
3.6.5 with 陳述句
with 陳述句用于包裝帶有使用背景關系管理器定義的方法的代碼塊的執行,這允許對普通的 try...except...finally 使用模式進行封裝以方便地重用,
關于with陳述句的詳細使用方法將在背景關系管理器中詳細介紹,
3.6.6 match 陳述句
match陳述句是Python3.10版本中新增的功能,
在條件分支中,如果可能情況不多,可以使用if陳述句來實作,如果可能的情況比較多,則需要在if陳述句中使用多個elif子句來實作,從Python3.10版本以后就可以開始使用match陳述句來實作了,
match陳述句的基本語法格式如下:
match 變數/運算式:
case 值1 [約束項1]:
子句體1
case 值2 [約束項2]:
子句體2
...
[case :
*子句體*] # 最多有一個,且必須是最后一個子句
1、match陳述句會對變數或者運算式進行求值,然后與case中的值匹配,如果匹配成功則執行相應case子句體,剩下所有的case子句則全部跳過不執行,如果全部匹配不成功,則最后可選的case _會被執行,
2、語法中的約束項采用的形式為if 運算式,只有case子句匹配成功,并且后面的約束項中的運算式也為真時,才執行相應的case子句體,
3、case _是一個必定匹配的case塊,意味著能夠匹配所有情況,match陳述句中最多可以有一個必定匹配的case塊,而且必須是最后一個,
3.6.7 函式定義、類定義
函式定義或者類定義也是陳述句,具體的函式定義和類定義將分別會在函式和類章節中詳細介紹,
練習
1、將教程中所有的復合陳述句示例全部手敲一遍并熟悉
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/482562.html
標籤:Python
