床長人工智能教程——複合語句

情感導師 7579

 添加導師LINE:jaqg

獲取更多愛情挽回攻略 婚姻修復技巧 戀愛脫單幹貨

聲明:本人只是分享一些床長的免費雜文而已,並非床長人工智能網校的收費文章。

複合語句包含(其他組的)其他語句;它們以某種方式影響或控制其他語句的執行。通常,複合語句跨越多行,儘管以簡單的形式可以將整個複合語句包含在一行中。

的if,while和for語句實現了傳統的控制流結構。 try指定一組語句的異常處理程序和/或清除代碼,而該 with語句允許圍繞代碼塊執行初始化和結束代碼。函數和類定義在語法上也是複合語句。

複合語句由一個或多個「子句」組成。子句由標題和「套件」組成。特定複合語句的子句標題都處於相同的縮進級別。每個子句頭均以唯一標識的關鍵字開頭,並以冒號結尾。套件是由子句控制的一組語句。套件可以是在標頭的冒號之後,與標頭在同一行上的一個或多個以分號分隔的簡單語句,也可以是後續行上的一個或多個縮進語句。套件的僅後者形式可以包含嵌套的複合語句;以下是非法的,主要是因為不清楚if以下else子句屬於哪個子句 :

床長人工智能教程——複合語句

if test1: if test2: print(x)

還要注意,在這種情況下,分號比冒號綁定更緊密,因此在以下示例中,將執行全部print()調用或不執行任何調用:

if x < y < z: print(x); print(y); print(z)

總結:

compound_stmt :: = if_stmt

| while_stmt

| for_stmt

| try_stmt

| with_stmt

| funcdef

| classdef

| async_with_stmt

| async_for_stmt

| 套件 :: = NEWLINE | NEWLINE INDENT + DEDENT

語句 :: = NEWLINE | stmt_list :: = (「;」 )* [「;」]

async_funcdef

stmt_liststatementstmt_listcompound_stmt

simple_stmtsimple_stmt

請注意,語句始終以NEWLINE可能後跟 結束DEDENT。還要注意,可選的連續子句總是以不能開始語句的關鍵字開頭,因此沒有歧義(else在Python中,「懸掛」問題通過要求嵌套 if語句縮進來解決)。

為了清楚起見,以下各節中語法規則的格式將每個子句放在單獨的行上。

8.1。該if聲明

該if語句用於條件執行:

if_stmt :: =「 if」 assignment_expression「:」 suite

(「 elif」 assignment_expression「:」 suite)*

[「 else」「:」 suite]

它通過逐一評估表達式直到發現一個為真,來選擇其中一個套件(請參閱布爾運算部分中的true和false的定義);然後執行該套件(並且不會if執行或評估語句的其他部分 )。如果所有表達式均為假else,則執行該子句的套件(如果存在)。

8.2。該while聲明

while只要表達式為真,該語句就可以重複執行:

while_stmt :: =「 while」 assignment_expression「:」 suite

[「 else」「:」 suite]

這將反覆測試表達式,如果為true,則執行第一個套件;否則,將執行第一個套件。如果表達式為假(可能是第一次測試)else,則執行該子句的套件(如果存在),並終止循環。

break在第一個套件中執行的語句將終止循環,而不執行該else子句的套件。continue 在第一個套件中執行的語句將跳過套件的其餘部分,並返回測試表達式。

8.3。該for聲明

該for語句用於遍歷序列的元素(例如字符串,元組或列表)或其他可迭代對象:

for_stmt :: =「 for」 target_list「 in」 expression_list「:」 suite

表達式列表只計算一次;它應該產生一個可迭代的對象。為的結果創建一個迭代器expression_list。然後按迭代器返回的順序對迭代器提供的每個項目執行一次套件。依次使用分配的標準規則將每個項目分配給目標列表(請參閱Assignment語句),然後執行套件。當項目用盡時(緊接序列為空或迭代器引發StopIteration異常時),將else執行子句中的套件(如果存在),並且循環終止。

break在第一個套件中執行的語句將終止循環,而不執行該else子句的套件。continue 在第一個套件中執行的語句將跳過套件的其餘部分,並繼續下一個項目,else如果沒有下一個項目,則繼續該子句。

for循環將分配給目標列表中的變量。這將覆蓋之前所有對這些變量的賦值,包括在for循環套件中進行的賦值:

for i in range(10):

print(i)

i = 5 # this will not affect the for-loop

# because i will be overwritten with the next

# index in the range

循環結束時,不會刪除目標列表中的名稱,但是如果序列為空,則循環將不會為其分配任何名稱。提示:內置函數range()返回一個適合於模擬Pascal的效果的整數迭代器。例如, 返回列表。for i := a to b dolist(range(3))[0, 1, 2]

注意 循環修改序列時會有些微妙(這僅適用於可變序列,例如列表)。內部計數器用於跟蹤下一個要使用的項目,並且每次迭代時都會遞增。當該計數器達到序列的長度時,循環終止。這意味着,如果套件從序列中刪除當前(或上一個)項目,則下一個項目將被跳過(因為它獲取已被處理的當前項目的索引)。同樣,如果套件在當前項目之前按順序插入一個項目,則下次通過循環再次處理當前項目。這可能會導致討厭的錯誤,可以通過使用整個序列的一部分進行臨時複製來避免這些錯誤,例如,

for x in a[:]:

if x < 0: a.remove(x)

評論列表

頭像
2024-06-05 22:06:42

我一直有關注,真的很有幫助

頭像
2024-01-20 04:01:50

被拉黑了,還有希望麼?

頭像
2024-01-06 16:01:44

發了正能量的信息了 還是不回怎麼辦呢?

頭像
2023-10-21 10:10:18

老師,可以諮詢下嗎?

 添加導師LINE:jaqg

獲取更多愛情挽回攻略 婚姻修復技巧 戀愛脫單幹貨

發表評論 (已有4條評論)