正文
3.需要迭代序列的一部分。在这种情况下,仅需要迭代序列切片就可以实现,注意添加必要的注释注明用意:
有一个例外:
当你迭代一个很大的序列时,切片操作引起的开销就比较大。
如果序列只有10个元素,就没有什么问题;但是如果有1000万个元素时,或者在一个性能敏感的内循环中进行切片操作时,开销就变得非常重要了。
这种情况下可以考虑使用xrange代替range [1]。
在用来迭代序列之外,range的一个重要用法是当你真正想要生成一个数字序列而不是用来生成索引:
正确使用列表解析
如果你有像这样的一个循环:
你可以使用列表解析来重写:
为什么要这么做?
一方面你避免了正确初始化列表可能带来的错误,另一方面,这样写代码让看起来很干净,整洁。
对于那些有函数式编程背景的人来说,使用map函数可能感觉更熟悉,但是在我看来这种做法不太Python化。
其他的一些不使用列表解析的常见理由:
1. 需要循环嵌套。
这个时候你可以嵌套整个列表解析,或者在列表解析中多行使用循环:
使用列表解析:
注意:在有多个循环的列表解析中,循环有同样的顺序就像你并没有使用列表解析一样。
2. 你在循环内部需要一个条件判断。
你只需要把这个条件判断添加到列表解析中去:
一个不使用列表解析的合理的理由是你在列表解析里不能使用异常处理。
如果迭代中一些元素可能引起异常,你需要在列表解析中通过函数调用转移可能的异常处理,或者干脆不使用列表解析。
性能缺陷