問題是這樣說的。Python:相當於PHP的什麼「==」
下面是一些解釋。
在PHP中。 「==」 是這樣的
2=="2" (Notice different type)
// True
雖然蟒蛇:
2=="2"
// False
2==2
// True
PHP中的等值蟒蛇 「==」 是 「===」
2===2
//True
2==="2"
//False
數百萬美元的題。什麼是PHP「==」相當於在Python中?
問題是這樣說的。Python:相當於PHP的什麼「==」
下面是一些解釋。
在PHP中。 「==」 是這樣的
2=="2" (Notice different type)
// True
雖然蟒蛇:
2=="2"
// False
2==2
// True
PHP中的等值蟒蛇 「==」 是 「===」
2===2
//True
2==="2"
//False
數百萬美元的題。什麼是PHP「==」相當於在Python中?
沒有一個。在檢查相等性之前,您需要轉換類型。在你的榜樣,你可以做
2==int("2")
Python沒有類型之間強迫的方式PHP確實,大多。
你必須明確地做到這一點:
2 == int('2')
或
str(2) == '2'
Python的強制轉換數字類型(你可以比較整數的浮動),和Python 2還自動轉換在Unicode和字節字符串類型之間(令許多人感到懊惱)。
沒有等價物。
所不同的是,Python是強類型的,而PHP不是,所以Python中兩種類型之間的比較總是返回false。除非你明確地轉換到比較的其他部分的類型。
你也可以有
str(2) == "2"
所以這裏是等價於PHP中的==
def php_cmp(a, b):
if a is None and isinstance(b, basestring):
a = ""
elif b is None and isinstance(a, basestring):
b = ""
if a in (None, False, True) or b in (None, False, True):
return bool(a) - bool(b)
if isinstance(a, (basestring, int, long, float)) and isinstance(b, (basestring, int, long, float)):
try:
return cmp(float(a), float(b))
except ValueError:
return cmp(a,b)
if isinstance(a, (tuple,list)) and isinstance(b, (tuple,list)):
if len(a) != len(b):
return cmp(len(a),len(b))
return cmp(a,b)
if isinstance(a, dict) and isinstance(b, dict):
if len(a) != len(b):
return cmp(len(a),len(b))
for key in a:
if key not in b:
raise AssertionError('not compareable')
r = cmp(a[key], b[key])
if r: return r
return 0
if isinstance(a, (basestring, int, long, float)):
return 1
if isinstance(b, (basestring, int, long, float)):
return -1
return cmp(a,b)
def php_equal(a, b):
return php_cmp(a,b) == 0
測試:
>>> php_equal(2, '2')
True
到不同的對象模型和數組實現這種由於不是100%正確的,但應該給你一些想法,自動轉換類型的公司可能會出現問題裏森。
通過問題中的測試用例,但與PHP的'=='的整個行爲相距甚遠。 – delnan
我不認爲這會像PHP的'=='一樣工作。請參閱[PHP手冊文檔中的比較表](http://us3.php.net/manual/en/types.comparisons.php)。查看「*與* *鬆散比較」。 –
可能是這樣的類似的東西:
x = 5
y = "5"
str(x) == str(y)
True
str(2) == str("2")
True
最好的答案可以給你的是避免PHP類比較。無論如何,它會導致您難以發現錯誤和花費在調試上的時間。
但是,如果你想在Python中編寫你自己的PHP解釋器,那沒關係。
您可能希望首先強制轉換變量並在之後進行比較。如果您在施法時編程失敗,您會提前發現錯誤,防止進一步損壞。
@frostnational不,它不是。 – thefourtheye
是的。但在PHP中。儘管變量類型不同,但它返回TRUE。在Python中,它返回FALSE – Realdeo
這相當於一個非常漫長而複雜的條件轉換序列,具體取決於參數類型及其在看似隨意(因此幾乎不可能簡化)方式中的值。我希望我在開玩笑。 – delnan