中的新的可迭代对象-编译系统透视++图解编译原理_

时间:2021-06-10 01:59:02
【文件属性】:
文件名称:中的新的可迭代对象-编译系统透视++图解编译原理_
文件大小:9.16MB
文件格式:PDF
更新时间:2021-06-10 01:59:02
Python 学习手册 中文 高清文字版 Python 3.0中的新的可迭代对象 Python 3.0中的一个基本的改变是,它比Python 2.X更强调迭代。除了与文件和字典这 样的内置类型相关的迭代,字典方法keys、values和items都在Python 3.0中返回可迭代对象, 就像内置函数range、map、zip和filter所做的那样。正如前一小节所介绍的,这些函数中的最 后三个都返回可迭代对象并处理它们。所有这些工具在Python 3.0中都根据请求产生结果, 而不是像它们在Python 2.6中那样构建结果列表。 尽管这样会节约内存空间,它可能在某种程度上会影响到我们的编码方式。目前为止, 在本书中的各种地方,我们已经把各种函数和方法调用结果都包含到一个list(...)调用中,从 而迫使它们一次产生其所有的结果: >>> zip('abc', 'xyz') # An iterable in Python 3.0 (a list in 2.6) >>> list(zip('abc', 'xyz')) # Force list of results in 3.0 to display [('a', 'x'), ('b', 'y'), ('c', 'z')] 这在Python 2.6中不是必需的,因为像zip这样的函数返回结果的列表。在Python 3.0中, 它们返回可迭代的对象,根据需要来产生结果。这意味着要在交互提示模式下(并且可能在 某些其他的环境中)显示结果需要额外的录入,这对较大的程序来说很有用,在计算很大的 结果列表的时候,像这样的延迟计算会节约内存并避免暂停。让我们快速地浏览Python 3.0 可迭代对象的应用。 range迭代器 在上一章中,我们学习过range内置函数的基本行为。在Python 3.0中,它返回一个迭代 器,该迭代器根据需要产生范围中的数字,而不是在内存中构建一个结果列表。这取代了较 早的Python 2.X xrange(参见后面的版本差异提示),如果需要一个范围列表的话,你必须使 用list(range(...))来强制一个真正的范围列表(例如,显示结果): C:\\misc> c:\python30\python >>> R = range(10) # range returns an iterator, not a list >>> R range(0, 10) >>> I = iter(R) # Make an iterator from the range >>> next(I) # Advance to next result 0 # What happens in for loops, comprehensions, etc. >>> next(I) 1 >>> next(I) 2 >>> list(range(10)) # To force a list if required [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 和这个调用在Python 2.X中返回的列表不同,Python 3.0中的range对象只支持迭代、索 引以及len函数。它们不支持任何其他的序列操作(如果你需要更多列表工具的话,使用 list(...)): >>> len(R) # range also does len and indexing, but no others 10 >>> R[0] 0 >>> R[-1] 9 >>> next(I) # Continue taking from iterator, where left off

网友评论