您的位置:首页 > 编程语言 > Python开发

Python的迭代协议和迭代环境

2017-07-02 13:16 78 查看
Python的迭代协议:有__next__方法的对象会前进到下一个结果,而在一系列末尾时,则会引发StopIteration异常。任何这类对象都认为是可迭代的。任何这类对象也能以for循环或其它迭代工具遍历,因为所有迭代工具内部工作起来都是在每次迭代中调用__next__方法(由next内置函数运行,2.x和3.x都是这样的!?),并且捕捉StopIteration异常来确定何时离开。


for循环和列表解析的直接关系:两者都是迭代工具。列表解析简单、高效的执行for循环任务:对可迭代对象内所有对象应用一个表达式,并收集其结果。可以把列表解析转换成for循环,而列表解析表达式的一部分的语法看起来就像是for循环的首行。


Python中的迭代环境:for循环、列表解析、map内置函数、in成员关系测试表达式以及内置函数sorted、zip、sum、any和all。这个分类也包括内置函数list、tuple和字符串join方法以及序列赋值运算。所有这些都是用了迭代协议(next方法)来一次一个元素逐个遍历可迭代对象。


逐行读取文本文件的最佳方法:不要可以去读取文件,作为替代方法,在迭代环境中打开文件,诸如for循环和列表解析中,然后让迭代工具在每次迭代中执行该文件的next方法,自动一次扫描一行。从代码编写的简易性、执行速度以及内存空间的需求方面看,这中做法通常是最佳的。


Python3.x对迭代做出的改变:相比2.x更强调迭代。除了文件和字典这样的内置类型相关的迭代,字典方法keys、values和items在3.x中返回的都是可迭代对象,就像内置函数range、map、zip和filter所做的那样。这些函数最后三个都返回可迭代对象并处理他们。所有这些工具在3.x中都根据请求结果,而不是像2.x中构建结果列表。


# in python 3.x
>>>zip('abc', 'xyz')
<zip object at 0x02E66710>

# in python 2.x
>>>zip('abc',  'xyz')
[('a', 'x'), ('b', 'y'), ('c', 'z')]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 迭代