Python程序设计:人工智能案例实践
上QQ阅读APP看书,第一时间看更新

3.6 for语句

for语句可以为一个序列中的每个项重复一个或多个操作。例如,字符串是由单个字符组成的序列,下面的代码段可以将字符串'Programming'中的每个字符用两个空格分隔开并显示出来:

for语句按照如下步骤执行:

  • 在进入循环语句时,它会将"Programming"中的字母P分配给关键字forin之间的目标变量,在本例中是character
  • 接下来执行套件中的语句,显示字符的值,后跟两个空格。
  • 执行套件后,Python为character分配序列中的下一个项(即"Programming"中的字母r),然后再次执行套件。
  • 当序列中还有未处理的项时,循环将会继续,直到所有的项都被处理,循环终止。在本例中,循环在显示最后一个字母g以及其后的两个空格后终止。

在套件中使用目标变量的情况很常见,例如在本例中显示character的值,但也可以不使用。

print函数的关键字参数end

内置函数print的功能是显示它的参数,然后将光标移到下一行。可以通过设置参数end来修改输出的效果,例如语句

会在显示character的值后继续显示两个空格,而不是换行。因此,光标不会移动到下一行。在Python中将end称为关键字参数(也称为命名参数),但end本身不是Python关键字。关键字参数end是可选项,如果参数中不包含end,会使用默认值换行符('\n')。Style Guide for Python Code建议在关键字参数的“=”两侧不加空格。

print函数的关键字参数sep

可以使用关键字参数sepseparator的简称)来指定分隔print显示的项之间的字符串。如果不指定此参数,默认情况下print使用空格作为分隔符。下面的代码显示三个数字,每个数字用逗号和空格分隔,而不仅仅是一个空格:

要删除默认的空格,可以使用sep=''(即空字符串)。

3.6.1 可迭代对象、列表和迭代器

for语句中,关键字in右侧的序列必须是一个可迭代对象,也就是说,for语句可以从这个对象中每次获取一个项,直到不再有未处理的项为止。除了字符串,Python还有其他的可迭代对象序列类型。列表是最常见的一种,它是用方括号([和])括起来并用逗号分隔的项的合集。下面的代码对列表中的5个整数求和:

每个序列都含有一个迭代器for语句使用隐藏的迭代器来依次获取序列中的每一个项,直到没有项需要处理为止。迭代器就像一个书签,使你知道自己在序列中的位置,当被调用时,它可以返回序列中的下一个项。本书会在第5章中详细介绍列表。在这一章里,将会演示列表中项的顺序的重要性,以及列表中的项是可变的(即可修改)。

3.6.2 内置函数range

下面的代码使用for语句和内置函数range进行10次迭代,显示0到9之间的值:

函数调用range(10)创建一个可迭代对象,表示从0开始一直到(但不包括)参数值10的连续整数序列,本例中为0、1、2、3、4、5、6、7、8、9。当处理完range产生的最后一个整数时,退出for语句。迭代器和可迭代对象是Python函数式编程的两个组成部分,本书将介绍更多的相关内容。

缺一错误

当假设range的参数值包含在生成的序列中时,经常会发生缺一错误。例如,在尝试生成序列0到9时使用9作为range的参数,但range仅生成0到8的序列。