2011-06-10 42 views
3
if a == b == c: 
    # do something 

我們假設a, b, c是字符串變量。如果我使用上面的代碼片段執行# do something當且僅當所有三個字符串相等時,是否有任何可能的副作用?在Python中使用`if a == b == c:pass;`有沒有副作用?

我問,因爲我要檢查三個變量互相反對,我也得到很多情況下:

if a == b == c: 
    # do something 
elif a == b != c: 
    # do something 
elif a != b == c. 
    # do something 
etc... 

也許有更好的實現代碼?

+1

不,沒有任何副作用。 – rubik 2011-06-10 09:38:59

+0

* sideeffects *這個詞在這裏有誤導性。作爲一個技術術語,顯然**可以是任何可能的副作用 - 如果'a','b'或/和'c'是類的實例,那麼比較運算符會以導致副作用的方式被覆蓋。 – BartoszKP 2014-06-25 22:29:30

回答

5

直到你以這種方式使用它,應該沒有副作用。

不過要小心這樣的事情:

if (a == b) == c: 

,因爲它會破壞鏈接,你會比較TrueFalsec值)。

+0

謝謝你提到括號。我錯過了,它會打破鏈接! – Aufwind 2011-06-10 09:41:14

10

the documentation

比較可以被任意鏈;例如,X <ÿ< = z是等效於x < y和y < = Z,不同的是y爲只計算一次(但在這兩種情況下,當x < y被發現是假的Z不是評估在所有)。

應該沒有副作用。

4
s = set([a, b, c]) 

if len(s) == 1: 
    print 'All equal' 
elif len(s) == 3: 
    print 'All different' 
else: 
    l = list(s) 
    print '%s and %s are different' % (l[0], l[1]) 
-1

對x!= y!= z有沒有評論?

我可以用愚蠢的方式得到正確的答案。

def aligndigits(list): 

    return ((x, y , z) for x in list for y in list for z in list if x != y and y != z and x != z) 
相關問題