我的理解是,该range()函数实际上是 Python 3 中的对象类型,它会动态生成其内容,类似于生成器。
在这种情况下,我预计以下行会花费过多的时间,因为为了确定 1 千万亿是否在范围内,必须生成千万亿值:
1000000000000000 in range(1000000000000001)
此外:似乎无论我添加多少个零,计算或多或少都需要相同的时间(基本上是瞬时的)。
我也尝试过这样的事情,但计算仍然几乎是即时的:
1000000000000000000000 in range(0,1000000000000000000001,10) # count by tens
如果我尝试实现我自己的 range 函数,结果就不那么好了!!
def my_crappy_range(N):
i = 0
while i < N:
yield i
i += 1
return
是什么range()使得它如此之快的引擎盖下做对象?