提供对类列表对象的基于引用的访问
spanning的Python项目详细描述
python跨度
提供Span
和ReadOnlySpan
类的简单库。它们的思想与C#'s Span<T>非常相似,但是它们是它的纯python实现。开始点和结束点是通过python的slice
对象处理的,这意味着负的结束点和开始工作与预期的一样,而步骤工作是对切片列表执行。
类提供对类列表对象的某些部分的读/写和只读访问,而不必通过普通切片重新分配它们。任何可以被索引并且具有长度的对象都可以使用,这意味着您甚至可以在字符串上创建ReadOnlySpan
s(在处理可能从文件中读取的大型字符串时非常有用)。
这些类在查看列表中非常长(超过100000个项)的某些区域时非常有用。使用这些类如下:
importmathdata=get_data()# returns a very large list# we only want the first half of the listend=int(math.ceil(len(data)/2))# without spanfirst_half=data[:end]# copies the entire first half# with spanfirst_half=Span(data,0,end)# no copies, just a reference is stored, acts like a list of half the length
在上面的示例中,如果列表很长(例如1000000个项),那么第一个示例会将整个列表的后半部分复制到新变量中,而第二个示例只存储引用和您请求的起点和终点。然后,新的SPAN对象的行为将完全像一个长度为一半的列表(例如,len
将返回500000的长度,例如前面的示例)。唯一完成的分配是针对SPAN对象本身,并且该对象在内部存储的数据很少(只有开始、结束和步骤值以及对象引用),这意味着它本身对内存的影响很小。