使用n = len(s)而不是直接使用len(s)更快吗?

Pyt*_*ner 4 python variable-length

通常为了节省一些时间,我希望我们在本地函数中使用n = len(s).我很好奇哪个电话更快或者它们是一样的?

while i < len(s):
  # do something
Run Code Online (Sandbox Code Playgroud)

VS

while i < n:
  # do something
Run Code Online (Sandbox Code Playgroud)

不应该有太大的区别,但是使用len(s),我们需要首先达到s,然后调用s.长度.这是O(1)+ O(1).但是使用n,它是O(1).我这么认为.

Jea*_*bre 7

拥有要快.

  • 使用n你一次查看变量(字典).
  • 使用len(s)你看两次(len也是我们必须寻找的功能).然后你调用该函数.

也就是说,如果你在while i < n:大多数情况下都可以使用经典for i in range(len(s)):循环,因为上边界不会改变,并且仅在开始时评估一次range(这可能会导致:为什么我不直接迭代元素还是用enumerate)

while i < len(s)允许您将索引与变化列表进行比较.这就是重点.如果你修正了界限,那就变得不那么有吸引力了.

for循环中,很容易跳过增量continue(就像忘记增加i并最终得到无限while循环一样容易)


Roc*_* Li 5

你说得对,这里有一些基准:

s = np.random.rand(100)
n = 100
Run Code Online (Sandbox Code Playgroud)

以上是设置.

%%timeit
50 < len(s)

86.3 ns ± 2.4 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
Run Code Online (Sandbox Code Playgroud)

与:

%%timeit
50 < n

36.8 ns ± 1.15 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
Run Code Online (Sandbox Code Playgroud)

但话说回来,很难想象~60ns水平的差异会影响速度.除非你打电话len(s)数百万次.