Python 3 中 range(n) 的惊人性能
在 Python 3 中,范围生成器函数以其卓越的速度而闻名检查其范围内大量的成员资格。考虑到似乎需要迭代的整数数量巨大,这种行为似乎是违反直觉的。 range 对象是如何实现如此卓越的效率的?
Python 3 中的智能序列:Range
与预期相反,Python 3 中的 range 对象并没有预先生成其整个范围的整数。相反,它充当智能序列,在迭代期间按需计算数字。它仅存储起点、停止点和步长,使其能够根据需要计算单个值或子范围。
优化的包含方法
range 对象还实现了高度优化的 contains 方法。此方法评估给定数字是否在范围内,而无需扫描整个序列。相反,它执行涉及起点、停止点和步长的数学计算。此计算在优化的 C 代码中执行,导致时间复杂度接近恒定。
简化范围对象的示例实现
为了说明这个概念,请考虑一个简化的我们自己的范围对象的实现:
class my_range: # ... other methods as described in the question and answer ... def __contains__(self, num): if self.step < 0: if not (self.stop < num <= self.start): return False else: if not (self.start <= num < self.stop): return False return (num - self.start) % self.step == 0
这个例子演示了高效背后的基本原理包含范围对象的方法。它计算范围成员资格,而不需要迭代整个范围。
总而言之,Python 3 中的范围对象是一个精心设计的数据结构,它将按需计算与优化的 contains 方法相结合。这种设计使其能够以惊人的效率对大范围内的大量人员进行收容检查。
以上是Python 3 的'range()”如何实现如此快速的大数成员资格检查?的详细内容。更多信息请关注PHP中文网其他相关文章!