通常为了节省一些时间,我希望在本地函数中使用n=len(s(。我很好奇哪一个呼叫更快,还是它们相同?
while i < len(s):
# do something
与
while i < n:
# do something
应该没有太大的差异,但使用len(s(,我们需要先到达s,然后调用s。长度。这是O(1(+O(1。但是使用n,它是O(1(。我想是的。
它有更快。
- 使用
n
,您在变量(字典(中查找一次 - 使用
len(s)
可以查找两次(len
也是我们必须查找的函数(。然后调用函数
也就是说,如果你大部分时间都使用while i < n:
,你就可以摆脱经典的for i in range(len(s)):
循环,因为上边界不会改变,并且在range
中只在开始时评估一次(这可能会导致你:为什么我不直接迭代元素或使用enumerate
?(
while i < len(s)
允许将您的索引与不同的列表进行比较。这就是重点。如果你固定了边界,它就会变得不那么吸引人。
在for
循环中,使用continue
跳过增量很容易(忘记增加i
并最终使用无限的while
循环也很容易(
你是对的,这里有一些基准:
s = np.random.rand(100)
n = 100
以上是设置。
%%timeit
50 < len(s)
86.3 ns ± 2.4 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
对比:
%%timeit
50 < n
36.8 ns ± 1.15 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
但话说回来,很难想象60ns级别的差异会影响速度。除非你给len(s)
打了数百万次电话。