句子大全

句子大全 > 好句子

床长人工智能教程——复合语句

好句子 2017-02-02 15:27:59
相关推荐

声明:本人只是分享一些床长的免费杂文而已,并非床长人工智能网校的收费文章。

复合语句包含(其他组的)其他语句;它们以某种方式影响或控制其他语句的执行。通常,复合语句跨越多行,尽管以简单的形式可以将整个复合语句包含在一行中。

的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)

阅读剩余内容
网友评论
相关内容
拓展阅读
最近更新