【发布时间】:2018-06-14 17:24:58
【问题描述】:
我在Short-Circuiting in Python 上阅读了一篇有趣的帖子,想知道in 运算符是否是这样。我的简单测试会得出结论,它不会:
%%timeit -n 1000
0 in list(range(10))
1000 loops, best of 3: 639 ns per loop
%%timeit -n 1000
0 in list(range(1000))
1000 loops, best of 3: 23.7 µs per loop
# larger the list, the longer it takes. however, i do notice that a higher
# value does take longer.
%%timeit -n 1000
999 in list(range(1000))
1000 loops, best of 3: 45.1 µs per loop
有没有详细解释为什么999 比0 花费的时间更长。 in 操作符像循环吗?
另外,有没有办法告诉in 运算符在找到值后“停止循环”(或者这是我没有看到的已经默认的行为)?
最后 - 是否有另一个我正在跳过的运算符/函数与我所说的“短路”in 相关?
【问题讨论】:
-
Is the in operator like a loop?是的,当您使用列表调用in时,我相信会调用 C 循环。 -
另外,
in是条件运算符,不是逻辑运算符,因此此处不适用“短路”。 -
@cᴏʟᴅsᴘᴇᴇᴅ,啊!好的。当我谷歌它时,我在文档中找不到它。您对此有任何引用吗?
-
in list将遍历列表直到找到元素。如果这就是你的意思,那么它就是短路的:一旦找到元素,它就不会继续查看列表。 -
我认为this answer 也可能很有趣(这与您要转换为
list的问题略有不同,但它是关于@987654335 如何进行的非常有趣的解释@作品)
标签: python python-internals short-circuiting