3.6 for
语句
for
语句可以为一个序列中的每个项重复一个或多个操作。例如,字符串是由单个字符组成的序列,下面的代码段可以将字符串'Programming'
中的每个字符用两个空格分隔开并显示出来:
for
语句按照如下步骤执行:
- 在进入循环语句时,它会将
"Programming"
中的字母P
分配给关键字for
和in
之间的目标变量,在本例中是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
可以使用关键字参数sep
(separator
的简称)来指定分隔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的序列。