WEB开发网
开发学院软件开发Python 可爱的 Python: Python 之优雅与瑕疵,第 1 部分 阅读

可爱的 Python: Python 之优雅与瑕疵,第 1 部分

 2008-09-30 12:57:47 来源:WEB开发网   
核心提示: Python 的发展大方向是以惰性方式构造类似于序列的对象;总体来说,这个方向是正确的,可爱的 Python: Python 之优雅与瑕疵,第 1 部分(7),惰性的伪序列既可以节省内存空间,还可以提高操作的速度(尤其是在处理非常大的与序列类似的 “东西” 时),但

Python 的发展大方向是以惰性方式构造类似于序列的对象;总体来说,这个方向是正确的。惰性的伪序列既可以节省内存空间,还可以提高操作的速度(尤其是在处理非常大的与序列类似的 “东西” 时)。

问题在于,Python 在判断 “硬” 序列和迭代器之间的差异和相似性方面仍然不完善。这个问题最棘手的部分是,它实际上违背了 Python 的 “duck typing” 思想:只要给定的对象具有正确的行为,就能够将它用于特定的用途,而不存在任何继承或类型限制。迭代器或类迭代器有时表现得像序列,但有时候不是;反过来说,序列常常表现得像迭代器,但并非总是如此。表现不像迭代器那些序列已涉及 Python 的神秘领地,其作用尚不明朗。

分歧

所有类序列或类迭代器的主要相似之处是,它们都允许进行循环遍历,无论是使用 for 循环、列表理解(list comprehension)还是生成器理解(generator comprehension)。除此之外,就出现了分歧。其中最重要的差异是,序列既可编制索引,也可直接切片(slice),而迭代器不能。实际上,为序列编制索引可能是最常用的序列操作 —— 究竟为什么在迭代器上无法使用索引呢?例如:

清单 9. 与序列和迭代器相似的东西

>>> r = range(10)
>>> i = iter(r)
>>> x = xrange(10)
>>> g = itertools.takewhile(lambda n: n<10, itertools.count())
#...etc...

对于所有这一切,都可以使用 for n in thing。实际上,如果用 list(thing) 显示它们,会得到完全相同的结果。但是,如果希望获得其中的一个特定条目(或一些条目的切片),就需要考虑 thing 的具体类型。例如:

上一页  2 3 4 5 6 7 8  下一页

Tags:可爱 Python Python

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接