請有人向我解釋爲什麼cmd
和req
被認爲是不相等的?另外,我怎樣才能讓他們平等呢?數據格式對比
cmd = 0x10
test1 = '\x10'
req = test1[0]
if(cmd is req):
print "Equal"
else:
print "Not Equal"
我正在使用python 2.7
。
請有人向我解釋爲什麼cmd
和req
被認爲是不相等的?另外,我怎樣才能讓他們平等呢?數據格式對比
cmd = 0x10
test1 = '\x10'
req = test1[0]
if(cmd is req):
print "Equal"
else:
print "Not Equal"
我正在使用python 2.7
。
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"
關鍵字is
不測試相等性。它測試身份。如果你想檢查字符串是否相等,只需使用==
即可。
在這種情況下,您還需要先將整數轉換爲字符串。
a is b
相同id(a) == id(b)
,和從()的id的文檔:
返回的對象的「身份」。這是一個整數(或長整數),在整個生命週期中保證這個對象是唯一的並且是常量。具有非重疊生命週期的兩個對象可能具有相同的id()值。
CPython實現細節:這是 內存中對象的地址。
切勿使用「是」用於平等測試,只有身份測試。 – trentcl
@trentcl建議編輯 – Adi219