循序渐进学Python之循环语句(1)(3)
三、for语句
循环结构在Python语言中有两种表现形式,一是前面介绍的while语句,再就是我们这里要讲述的for语句。for语句基本上是一种遍历型的循环,因为它会依次对某个序列中全体元素进行遍历,遍历完所有元素之后便终止循环。for语句的语法如下所示:
for 控制变量 in 可遍历的表达式: 循环体 |
|
图6 :for语句的示意图 |
读者请注意,由于for语句中的“可遍历的表达式”涉及多种Python的数据类型,为了防止一次灌输太多的内容导致读者难以适应,所以这里不作详细介绍,等到介绍有关数据类型时我们再进行相应的讨论。
现在,让我们以交互方式执行一个for语句,如下所示:
|
图7:以交互方式测试for语句 |
四、range)函数详解
很多时候,for语句都是和range)函数结合使用的,比如我们利用两者来输出0到9之间的偶数,如下所示:
# -*- coding: cp936 -*- #输出10以下的非负整数中的偶数 print '10以下的非负整数中的偶数为:' for integer in range(10): if integer % 2 == 0: print integer |
当我们在IDEL中运行该程序时,结果如下所示:
|
图8 :for语句结合range)函数的示例程序运行结果 |
现在解释一下程序的执行过程。首先,for语句开始执行时,range)函数会生成一个由0~9这十个值组成的序列;然后,将序列中的第一个值即0赋给变量integer,并执行循环体。在循环体中,我们将变量integer除以2,如果余数为零,则打印该值;否则跳过打印语句。执行循环体中的选择语句后,序列中的下一个值将被装入变量integer,如果该值是序列中的,那么继续循环,以此类推,直到遍历完序列中的所有元素为止。
好了,现在我们开始关注range)函数本身,首先以交互方式查看range10)的返回值,如下所示:
|
图9 :range10)的返回结果 |
我们看到,range10)的返回的是整数0~9,各整数之间用逗号隔开,并且两端用方括号括住,这是一个典型的Python列表——关于Python的列表类型我们会在将来的文章中专门加以介绍。需要注意的是,range10)返回的列表中的第一个值是整数0,然后递增1,最后一个值正好比给该函数的参数值小1即参数-1)。这一点初学者经常搞混,所以在此特别提醒一下。
读者可能会问:能否让range)函数返回的值不从0开始,而是从指定的数字开始呢?答案是肯定的,不过为此需要给range)函数指定两个参数,比如我们想让该函数返回的列表中的值为整数1~10,则需要这样指定参数:range1,11)。下面看一下执行结果如何:
|
图10 :range1,11)的返回结果 |
看了上面两个range)函数调用,读者也许已经发现,两者返回的值都是递增1,但是要想每次递增2,能行么?答案还是肯定的,不过这次就要使用三个参数来调用range)函数了,我们看看range1,11,2)、range11,1,-2)和range8,89,8)的返回情况,如下所示:
|
图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)函数将返回一个空表,如下所示:
|
图11 :range)返回空表的情形 |
评论关闭