2017-10-14 37 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是一個字符串。這兩個不相同,所以你的代碼打印「不等」。

你可以這樣做,而不是:

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" 

爲了完整起見,你可以改爲轉換test1[0]使用ord()的整數,這是chr()倒數:

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

關鍵字is不測試相等性。它測試身份。如果你想檢查字符串是否相等,只需使用==即可。

在這種情況下,您還需要先將整數轉換爲字符串。

a is b相同id(a) == id(b),和從()的id的文檔:

返回的對象的「身份」。這是一個整數(或長整數),在整個生命週期中保證這個對象是唯一的並且是常量。具有非重疊生命週期的兩個對象可能具有相同的id()值。

CPython實現細節:這是 內存中對象的地址。