我正在阅读有关Python的教程,其中说:“有一个xrange()变体,它避免了为性能敏感的情况构建整个列表的成本(在Python 3000中,range()将具有良好的性能表现,您可以忘记xrange()。” Source。
我要问的是Python 2.x,而不是Python3。
我不确定这是什么意思。我是否了解range(a, b)
创建了一个从a
到b
的所有值的列表,然后对其进行迭代,而xrange(a, b)
仅在迭代时创建了每个值?如果是这种情况,那么只有在代码实际上没有遍历整个列表并尽早中断的情况下,性能才能得到改善。
有人可以对此发表评论吗?
答案 0 :(得分:0)
您理解正确。
区别在于内存:使用range()
时,整个列表将分配到内存中,而xrange()
返回a generator(实际上,它返回充当生成器的xrange对象)
关于xrange()
的{{3}}在这个问题上很清楚:
xrange()优于range()的优势很小(因为xrange()仍然需要在创建值时创建值),除非在内存不足的计算机上使用了非常大的范围,或者所有范围元素从未使用
答案 1 :(得分:0)
在python3中, <input
{...getInputProps({
type: 'search',
placeholder: 'Search For An Item',
id: 'search',
className: this.state.loading ? 'loading' : '',
onChange: e => {
e.persist();
this.onChange(e, client);
},
})}
/>
不会一次生成整个序列,因此它也是高效的:
与常规列表或元组相比,范围类型的优势在于,范围对象将始终占用相同(少量)的内存,无论其表示的范围大小如何(因为它仅存储开始,停止和步长值,并根据需要计算各个项目和子范围。