python中那些比较之间有什么区别?

时间:2014-07-18 14:05:04

标签: python comparison operators difference

例如,我们使用配对值保存六个变量。

a, b, c = 1, 2, 3
z, x, v = 1, 2, 3

基本上,我们正在使用==& and运算符进行多重比较;

In [6]: a == z and b == x and c == v
Out[6]: True

但我们可以在没有and逻辑运算符的情况下进行比较,例如;

In [10]: (a,b,c) == (z,x,v)
Out[10]: True

OR

In [31]: all([(a == z), (b == x), (c == v)])
Out[31]: True

所有使用的回答都是一样的。但我想知道这些比较方法之间是否有任何差异,比如逻辑,操作,不同类型的值等不同的响应等。?

2 个答案:

答案 0 :(得分:4)

它们都将产生相同的结果(假设在计算值或比较它们时没有抛出异常)。

但他们的计算方式不同。如果它找到一个不相等的对,那么它将停止,因此不会比较所有对:

a == z and b == x and c == v

如果要比较的值实际上是函数调用,那么如果最终结果不需要函数,则不会调用这些函数。

其他两个表单将执行所有计算,因为您正在构建元组和值列表:

(a,b,c) == (z,x,v)                       # makes two tuples of values
all([(a == z), (b == x), (c == v)])      # makes a list of values

答案 1 :(得分:1)

我不认为,三种给定的比较方法之间存在逻辑差异。虽然我更喜欢第一种方法,但我认为理解起来更清楚。但是,由于必须调用不同的强制转换,因此可能仍然存在一些执行时间差异。

所以我看看时差:

import time

a, b, c = 1, 2, 3
z, x, v = 1, 2, 3

iterations = 1000000

start = time.time()
for i in range(iterations):
  a == z and b == x and c == v
end = time.time()
print end - start


start = time.time()
for i in range(iterations):
  (a,b,c)==(z,x,v)
end = time.time()
print end - start


start = time.time()
for i in range(iterations):
  all([(a==z), (b==x), (c==v)])
end = time.time()
print end - start

输出:

0.268415212631
0.283325195312
0.413020133972

所以基本上第一种方法是最快的方法。哪一个可以轻易想象,因为没有"铸造过度"必须进行。