python - 使用元组而不是 bool 运算符

标签 python tuples boolean-operations

以下评估由 链接的两个(或多个)条件的方法之间是否存在差异(在性能方面,而不是可读性方面)?

a == 1 and b == 2

(a,b) == (1,2)


相同:

a == 1 or b == 1

1 in (a,b)


哪种方式更可取?一种使用 bool 运算符还是另一种使用元组?

最佳答案

这些是使用 python 2.7

的一些计时
In [29]: a = 1 

In [30]: b = 2

In [31]: timeit a == 1 and b == 2
10000000 loops, best of 3: 82.2 ns per loop

In [32]: timeit (a,b) == (1,2)
10000000 loops, best of 3: 132 ns per loop

In [33]: timeit 1 in (a,b)
10000000 loops, best of 3: 118 ns per loop

当结果为 False 时:

In [37]: timeit a == 2 and b == 2
10000000 loops, best of 3: 52.2 ns per loop

In [38]: timeit 3 in (a,b)
10000000 loops, best of 3: 151 ns per loop

In [39]: timeit (a,b) == (2,2)
10000000 loops, best of 3: 144 ns per loop

a == 2 and b == 2 更快,因为 andshort circuit operator

根据 wim 的评论,使用集合比检查元组的成员更快:

In [55]: timeit 3 in {a,b}
10000000 loops, best of 3: 92.9 ns per loop

关于python - 使用元组而不是 bool 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25486268/

相关文章:

c++ - 我无法直接将模板函数传递给 std::apply 但我可以通过 lambda

php - Checkbox类型数据的MySQL数据结构与计算数据

c - C 中 bool 表达式的解析和计算

python - Python中genfromtxt()中的可变列数?

python - pyplot : Plotting [Lists of [(Lists of Tuples)]]

python - 将 1 层图像转换为 3 层图像

python - 动态检查mypy中的元组长度

c - && 和 || 结合的变量

python - map() lambda() 操作数仅在 python 2.7.6 中不受支持

python - Sphinx 意外的部分标题 - numpydoc