例如,我们使用配对值保存六个变量。
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
所有使用的回答都是一样的。但我想知道这些比较方法之间是否有任何差异,比如逻辑,操作,不同类型的值等不同的响应等。?
答案 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
所以基本上第一种方法是最快的方法。哪一个可以轻易想象,因为没有"铸造过度"必须进行。