2017-10-14 12 views
1

誰かが私に説明してください。なぜcmdreqは等しくないと考えられますか?また、どうすればそれらを等しくすることができますか?比較のデータ形式

cmd = 0x10 
test1 = '\x10' 
req = test1[0] 
if(cmd is req): 
    print "Equal" 
else: 
    print "Not Equal" 

私はpython 2.7を使用しています。

+1

絶対に使用しないでください平等テストのためのものであり、アイデンティティテストのみです。 – trentcl

+0

@trentcl編集の提案 – Adi219

答えて

3

cmdは整数です。 reqは文字列です。 2つは同等ではないので、あなたのコードは「等しくない」と表示されます。

あなたは代わりにこれを行うことができます:

if chr(cmd) == test1[0]: 
    print "Equal" 
else: 
    print "Not Equal" 

chr()は整数に対応するシングルバイト文字列に0〜255の範囲の整数に変換します。

また、isではなく、==を使用して等価性をテストします。あなたがより簡単にこれを書くことができ

:完全性については

print "Equal" if chr(cmd) == test1[0] else "Not Equal" 

を、あなたの代わりにchr()の逆であるord()を使用して整数にtest1[0]を変換することができます:

print "Equal" if cmd == ord(test1[0]) else "Not Equal" 
1

キーワードisは、等価性をテストしません。それは同一性をテストします。文字列が等しいかどうか確認する場合は、==を使用してください。

この場合、整数を最初に文字列に変換する必要もあります。

a is bid(a) == id(b)と同じであり、IDの文書()から:

リターンオブジェクトの「同一性」。これは、そのオブジェクトの存続期間中に一意で定数であることが保証されている整数(または長整数)です。存続期間が重複しない2つのオブジェクトは、同じid()値を持つことがあります。

CPython実装の詳細:これは メモリ内のオブジェクトのアドレスです。