首頁 > 軟體

一文詳解Python中複合語句的用法

2022-07-24 18:00:25

Python複合語句

複合語句是包含其它語句(語句組)的語句;它們會以某種方式影響或控制所包含其它語句的執行。通常,複合語句會跨越多行,雖然在某些簡單形式下整個複合語句也可能包含於一行之內。

if、while和for語句用來實現傳統的控制流程構造。try語句為一組語句指定例外處理和/和清理程式碼,而with語句允許在一個程式碼塊周圍執行初始化和終結化程式碼。
函數和類定義在語法上也屬於複合語句。

一條複合語句由一個或多個子句組成。一個子句則包含一個句頭和一個句體。特定複合語句的子句頭都處於相同的縮排層級。

每個子句頭以一個作為唯一標識的關鍵字開始並以一個冒號結束。

子句體是由一個子句控制的一組語句。子句體可以是在子句頭的冒號之後與其同處一行的一條或由分號分隔的多條簡單語句,或者也可以是在其之後縮排的一行或多行語句。只有後一種形式的子句體才能包含巢狀的複合語句。

1.if 語句

if 語句用於有條件地執行。if語句的一般語法格式如下:

if 條件表示式:
子句體1
[elif 條件表示式:
子句體2]* # *號代表該字句可以是0或多個,下同
[else:
子句體3]

if語句通過對條件表示式進行求值,如果為真則執行相應的子句體,如果全都為假,可選的else子句體將會被執行。

注意:

1、False、None、0、""、()、[]、{}`都視為假

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.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

2、在使用for迴圈中,迴圈變數名最好用_開頭的變數名,甚至直接就用_這樣的變數名,這樣就不會和外部變數名稱衝突。

3、for迴圈經常搭配range函數使用。range函數可以生成一系列的整型數位。比如:range(5)可以生成:0,1,2,3,4。

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

5.with 語句

with 語句用於包裝帶有使用上下文管理器定義的方法的程式碼塊的執行。這允許對普通的 try...except...finally 使用模式進行封裝以方便地重用。

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塊,而且必須是最後一個。

到此這篇關於一文詳解Python中複合語句的用法的文章就介紹到這了,更多相關Python複合語句內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com