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

a, b, cが文字列変数であるとします。上記のスニペットを使用して、3つの文字列がすべて等しい場合にのみ# do somethingを実行すると、副作用がありますか?`a == b == c:pass;`を使うと、pythonに副作用がありますか?

私はお互いに対して3つの変数を確認する必要があると私は多くのケースを取得するので、私は求めています:

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

は、おそらくこれをコーディングするより良い方法はありますか? the documentationから

+1

いいえ、副作用はありません。 – rubik

+0

ここでは* sideeffects *という単語が誤解を招くようなものです。専門用語としては、 'a'、' b'、/ 'c'がクラスのインスタンスであり、比較演算子が副作用を引き起こすような方法でオーバーライドされる場合、明らかに可能な副作用が**ある可能性があります。 – BartoszKP

答えて

5

このような方法で使用するまでは、副作用はありません。

しかし、のようなものについての世話をする:それは連鎖すると、あなたが)TrueまたはFalsec値を比較します解除されますので、

if (a == b) == c: 

+0

括弧に言及してくれてありがとう。私は連鎖を壊すだろう、それを逃した! – Aufwind

10

比較は任意に連鎖させることができます。 x < y < = zは、xが< yおよびy < = zと等価である点を除いて、yは1回だけ評価されます(ただし、両方の場合にx <が偽であると評価されません)。

副作用はないはずです。

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) 
関連する問題