首页 理论教育 for语句的应用Python即学即用

for语句的应用Python即学即用

时间:2023-10-27 理论教育 版权反馈
【摘要】:for语句能够在后台自动调用迭代器的next方法,捕获StopIteration异常并结束循环。歌手姓名按照出场次序保存在元组中,利用for循环依次输出。运行程序,运行结果如下:2.range函数在Python中for语句与range函数搭配可以实现其他语言中for循环的功能。文件ch3_13.txt中的内容如图3-2所示:图3-2 文本文件中的内容运行程序,输出结果如下5.列表解析for语句也可以用于列表解析中。

for语句的应用Python即学即用

Python中的for语句与其他语言区别较大,更像其他语言的foreach循环,为Python提供了强大的循环结构,可以遍历序列成员,可以用在列表解析和生成器表达式中。for语句能够在后台自动调用迭代器的next方法,捕获StopIteration异常并结束循环。 

for语句的使用格式: 

978-7-111-53989-6-Chapter03-32.jpg

迭代对象可以是序列、迭代器或其他支持迭代的对象。每次循环时,迭代变量表示可迭代对象的当前元素,一次循环结束,再表示迭代对象的下一个元素,直至所有元素迭代完毕。 

下面编程输出“我是歌手”节目第三季第一场中出场歌手的次序和姓名(ch3-9.py)。歌手姓名按照出场次序保存在元组中,利用for循环依次输出。 

978-7-111-53989-6-Chapter03-33.jpg

运行程序,运行结果如下:

978-7-111-53989-6-Chapter03-34.jpg

978-7-111-53989-6-Chapter03-35.jpg

1.enumerate函数 

在ch3-9.py中,借助了变量n来显示歌手的出场次序,其实自Python 2.3后,Python就新增加了enumerate 函数,不仅可以访问可迭代对象的元素,还可以访问其索引(从零开始)。 

下面用enumerate 函数改写ch3-9.py代码(ch3-10.py)。程序直接利用enumerate 函数的返回值获得歌手出场次序及姓名。 

978-7-111-53989-6-Chapter03-36.jpg

运行程序,运行结果如下:

978-7-111-53989-6-Chapter03-37.jpg

2.range函数 

在Python中for语句与range函数搭配可以实现其他语言中for循环的功能。在本书前面章节中也用到过range函数,本小节将对range函数做详细介绍。 

range函数的使用格式: 

978-7-111-53989-6-Chapter03-38.jpg

range函数会返回一个包含“(终值-初值)/步长”个元素的有序列表,各元素的值大于或等于初值且小于终值,range函数的三个参数(初值,终值,步长)都要求是整型数字,步长省略则默认为1,初值省略则默认为0,如: 

978-7-111-53989-6-Chapter03-39.jpg

注意:元素值必须小于终值。步长不可以为0,否则会引发错误,如:

978-7-111-53989-6-Chapter03-40.jpg

978-7-111-53989-6-Chapter03-41.jpg

例如,下面的程序利用for语句和range函数 计算1+2+3+…+100(ch3-11.py)。为了range中的元素能取到100,range的终值参数应该设为101。 

978-7-111-53989-6-Chapter03-42.jpg

运行程序,运行结果为:

978-7-111-53989-6-Chapter03-43.jpg

本例中虽然代码很简洁,但是range(1,101)要产生100个元素的列表,占有较多的内存,如果需要处理更大范围列表时,range函数的缺点显而易见。为此Python提供了xrange函数。 

3.xrange函数 

xrange函数与range函数类似,但不会在内存中创建列表的完整副本。它只能用于for循环中,在for循环外,xrange函数毫无意义。 

xrange函数的调用格式与range函数相同。 

978-7-111-53989-6-Chapter03-44.jpg

如:

978-7-111-53989-6-Chapter03-45.jpg

4.迭代器 

for循环不仅可以遍历序列,也可以访问迭代器。用for循环访问迭代器与访问序列的方法差不多。迭代器对象都有一个next方法,调用后会返回下一个条目。所有条目迭代完后,迭代器会引发StopIteration异常告诉程序循环结束。for语句会自动(不需要程序员处理)调用迭代器的next方法,捕获StopIteration异常并结束循环。当用for语句循环迭代一个对象条目时,不需要区分对象是迭代器还是序列,因为for语句操作序列和迭代器在前台是没有区别的。 

(1)创建迭代器 

Python的内建函数iter可以返回一个迭代器对象。iter函数有两种使用格式,分别为:

978-7-111-53989-6-Chapter03-46.jpg(www.xing528.com)

要求参数collection必须是序列或者是实现了_iter_()方法和next()方法的类。

978-7-111-53989-6-Chapter03-47.jpg

这种形式中callable会不断被调用,直至遇到sentinel

(2)序列迭代器 

对序列调用iter函数即返回序列迭代器,如: 

978-7-111-53989-6-Chapter03-48.jpg

由上例可以看到迭代器存在限制,不能向后移动,不能回到开始,也不能复制一个迭代器。在上例中建立迭代器iyz后,调用了一次next方法,回头再用for循环迭代iyz时,是从第2项list开始的。 

(3)字典迭代器 

字典可以通过键(iterkeys())、值(itervalues())或者键-值(iteritems())对来迭代。在只给出字典名的情况下,for循环会遍历字典的键,即: 

978-7-111-53989-6-Chapter03-49.jpg

等价于

978-7-111-53989-6-Chapter03-50.jpg

下面编程显示电话簿中所有信息(ch3-12.py)。 

分析:利用字典来存储电话簿,利用for语句遍历输出电话簿信息。

978-7-111-53989-6-Chapter03-51.jpg

运行程序,运行结果如下:

978-7-111-53989-6-Chapter03-52.jpg

978-7-111-53989-6-Chapter03-53.jpg

使用iterkeys()方法改写程序,代码如下(ch3-12-1.py):

978-7-111-53989-6-Chapter03-54.jpg

使用iteritems()方法改写程序,代码如下(ch3-12-2.py):

978-7-111-53989-6-Chapter03-55.jpg

在Python 3.x中,字典对象不再支持iterkeys()、itervalues()和iteritems(),取而代之的是key()、values()和item()。 

(4)文件迭代器 

文件对象生成的迭代器会自动调用readline()方法,即: 

978-7-111-53989-6-Chapter03-56.jpg

等价于

978-7-111-53989-6-Chapter03-57.jpg

下面读出并显示文本文件中的所有内容(ch3-13.py) 

分析:打开文件后,用for语句遍历文件每一行并输出。

978-7-111-53989-6-Chapter03-58.jpg

文件ch3_13.txt中的内容如图3-2所示:

978-7-111-53989-6-Chapter03-59.jpg

图3-2 文本文件中的内容

运行程序,输出结果如下

978-7-111-53989-6-Chapter03-60.jpg

5.列表解析 

for语句也可以用于列表解析中。列表解析是一个非常简洁高效的工具,可以动态地创建列表。列表解析的使用格式如下: 

978-7-111-53989-6-Chapter03-61.jpg

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈