三、for语句

循环结构在Python语言中有两种表现形式,一是前面介绍的while语句,再就是我们这里要讲述的for语句。for语句基本上是一种遍历型的循环,因为它会依次对某个序列中全体元素进行遍历,遍历完所有元素之后便终止循环。for语句的语法如下所示:

for  控制变量  in  可遍历的表达式:
  循环体
这里的关键字in是for语句的组成部分,而非运算符in关于Python语言中的运算符我们会在后续的文章中加以介绍)。“可遍历的表达式”被遍历处理,每次循环时,都会将“控制变量”设置为“可遍历的表达式”的当前元素,然后在循环体开始执行。当“可遍历的表达式”中的元素遍历一遍后,即没有元素可供遍历时,退出循环。for语句的示意图如下所示:

Python

图6 :for语句的示意图

读者请注意,由于for语句中的“可遍历的表达式”涉及多种Python的数据类型,为了防止一次灌输太多的内容导致读者难以适应,所以这里不作详细介绍,等到介绍有关数据类型时我们再进行相应的讨论。

现在,让我们以交互方式执行一个for语句,如下所示:

Python

图7:以交互方式测试for语句

四、range)函数详解

很多时候,for语句都是和range)函数结合使用的,比如我们利用两者来输出0到9之间的偶数,如下所示:

# -*- coding: cp936 -*-
#输出10以下的非负整数中的偶数
print '10以下的非负整数中的偶数为:'

for integer in range(10):
    if integer % 2 == 0:
        print integer

当我们在IDEL中运行该程序时,结果如下所示:

Python

图8 :for语句结合range)函数的示例程序运行结果

现在解释一下程序的执行过程。首先,for语句开始执行时,range)函数会生成一个由0~9这十个值组成的序列;然后,将序列中的第一个值即0赋给变量integer,并执行循环体。在循环体中,我们将变量integer除以2,如果余数为零,则打印该值;否则跳过打印语句。执行循环体中的选择语句后,序列中的下一个值将被装入变量integer,如果该值是序列中的,那么继续循环,以此类推,直到遍历完序列中的所有元素为止。

好了,现在我们开始关注range)函数本身,首先以交互方式查看range10)的返回值,如下所示:

Python

图9 :range10)的返回结果

我们看到,range10)的返回的是整数0~9,各整数之间用逗号隔开,并且两端用方括号括住,这是一个典型的Python列表——关于Python的列表类型我们会在将来的文章中专门加以介绍。需要注意的是,range10)返回的列表中的第一个值是整数0,然后递增1,最后一个值正好比给该函数的参数值小1即参数-1)。这一点初学者经常搞混,所以在此特别提醒一下。

读者可能会问:能否让range)函数返回的值不从0开始,而是从指定的数字开始呢?答案是肯定的,不过为此需要给range)函数指定两个参数,比如我们想让该函数返回的列表中的值为整数1~10,则需要这样指定参数:range1,11)。下面看一下执行结果如何:

Python

图10 :range1,11)的返回结果

看了上面两个range)函数调用,读者也许已经发现,两者返回的值都是递增1,但是要想每次递增2,能行么?答案还是肯定的,不过这次就要使用三个参数来调用range)函数了,我们看看range1,11,2)、range11,1,-2)和range8,89,8)的返回情况,如下所示:

Python

图11 :具有三个参数的range)的返回情况

好了,现在我们来总结一下range)函数的用法。该函数的一般形式如下所示:

range[start ,] stop [, step])

上面方括号内的参数表示是可选的,但所有参数必须是整数。如果参数step被省略的话,它的默认值是1;如果参数start被省略的话,它的默认值将是0。但是无论如何,参数stop是不允许省略的,所以range)函数只有一个参数时,它表示rangestop);当range)函数带有两个参数时,它表示rangestart,stop)。

我们知道range)返回的是一个列表,列表中的整数值为[start, start + step, start + 2 * step, start + 3 * step,...]。如果参数step为正值,那么列表中最后一个元素为小于参数stop的那个最大的整数 start + i * step ;如果参数step为负值,那么列表中最后一个元素为大于参数stop的那个最小的整数 start + i * step 。但是任何时候参数step的值都不能为零。只要将上面的列举的range)示例跟这里的一般性介绍相结合,我们就能更好的理解该内建函数的用法。

需要注意,当参数step为正值时,参数start必须小于参数step;当参数step为负值时,参数start必须大于参数step,否则range)函数将返回一个空表,如下所示:

Python

图11 :range)返回空表的情形


评论关闭