2014-04-27 76 views
5

問題是這樣說的。Python:相當於PHP的什麼「==」

下面是一些解釋。

在PHP中。 「==」 是這樣的

2=="2" (Notice different type) 
// True 

雖然蟒蛇:

2=="2" 
// False 
2==2 
// True 

PHP中的等值蟒蛇 「==」 是 「===」

2===2 
//True 
2==="2" 
//False 

數百萬美元的題。什麼是PHP「==」相當於在Python中?

+0

@frostnational不,它不是。 – thefourtheye

+0

是的。但在PHP中。儘管變量類型不同,但它返回TRUE。在Python中,它返回FALSE – Realdeo

+0

這相當於一個非常漫長而複雜的條件轉換序列,具體取決於參數類型及其在看似隨意(因此幾乎不可能簡化)方式中的值。我希望我在開玩笑。 – delnan

回答

5

沒有一個。在檢查相等性之前,您需要轉換類型。在你的榜樣,你可以做

2==int("2") 
5

Python沒有類型之間強迫的方式PHP確實,大多

你必須明確地做到這一點:

2 == int('2') 

str(2) == '2' 

Python的強制轉換數字類型(你可以比較整數的浮動),和Python 2還自動轉換在Unicode和字節字符串類型之間(令許多人感到懊惱)。

1

沒有等價物。

所不同的是,Python是強類型的,而PHP不是,所以Python中兩種類型之間的比較總是返回false。除非你明確地轉換到比較的其他部分的類型。

1

你也可以有

str(2) == "2" 
0

所以這裏是等價於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%正確的,但應該給你一些想法,自動轉換類型的公司可能會出現問題裏森。

+1

通過問題中的測試用例,但與PHP的'=='的整個行爲相距甚遠。 – delnan

+1

我不認爲這會像PHP的'=='一樣工作。請參閱[PHP手冊文檔中的比較表](http://us3.php.net/manual/en/types.comparisons.php)。查看「*與* *鬆散比較」。 –

0

可能是這樣的類似的東西:

x = 5 
y = "5" 

str(x) == str(y) 
True 

str(2) == str("2") 
True 
0

最好的答案可以給你的是避免PHP類比較。無論如何,它會導致您難以發現錯誤和花費在調試上的時間。

但是,如果你想在Python中編寫你自己的PHP解釋器,那沒關係。

您可能希望首先強制轉換變量並在之後進行比較。如果您在施法時編程失敗,您會提前發現錯誤,防止進一步損壞。