标签:art mos http 序列 xrange back 定义 之间 print
说到序列,我们第一想到的是一组有序元素组成的集合。同时,每个元素都有唯一的下标作为索引。
在Python中,有许多内界的序列。包括元组tuple,列表list,字符串str等。上面提到的序列类型(list,tuple,str)有一个共同的特点,就是当序列对象创建时,需要开辟专门的内存空间,保存序列中的所有元素。换句话说,这些序列对象本质上,是一个集合。
例如,下面代码创建了一个序列对象s。在该对象序列创建时,需要开辟内存空间将序列中的3个元素(整数1,2,3)保存下来。
s=[1,2,3]
然而,根据python官方文档的定义,一个序列对象不必要保存所有的元素。一般来说,一个序列对象至少需要实现如下两个方法。
例如,下面的代码定义了一个序列类型。
class MyRange: def __init__(self, start, end): self.start = start self.end = end def __len__(self): return self.end - self.start def __getitem__(self, index): if index < 0 or index >= len(self): raise IndexError return index + self.start
它定义的是从start到end-1之间所有整数组成的序列。
下面的测试代码
myrange = MyRange(0, 10) print myrange[9] print myrange[10]
输出如下
9 Traceback (most recent call last): File "test.py", line 25, in <module> print myrange[10] File "test.py", line 19, in __getitem__ raise IndexError IndexError
当然,在Python中,序列的下标是可以为负的。因此,我们对__getitem__方法做如下修改。
class MyRange: def __getitem__(self, index): index = index if index >= 0 else index + self.end if index < 0 or index >= len(self): raise IndexError return index + self.start
测试代码
myrange = MyRange(0, 10) print myrange[-1] print myrange[-2]
输出结果
9 8
有了上面的介绍以后,我们可以很容易理解python中range方法与xrange方法区别了。
因此,如果只对序列进行读操作,xrange方法效率较高;但是如果需要改变序列的元素,或者需要往序列增删元素,那只能通过range方法生成一个list对象。
转自:http://blog.csdn.net/hedan2013/article/details/55000018
标签:art mos http 序列 xrange back 定义 之间 print
原文地址:http://www.cnblogs.com/shixisheng/p/7089930.html