2014-04-27 2 views
5

La domanda lo dice.Python: Qual è l'equivalente di PHP "=="

Ecco una piccola spiegazione.

In PHP. "==" funziona così

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

Mentre in pitone:

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

L'equivalente per Python "==" in php è "==="

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

Million dollar domanda. Cosa vuol dire php "==" in python?

+0

@frostnational No, non lo è. – thefourtheye

+0

Vero. Ma in PHP. Anche se il tipo di variabile è diverso, restituisce VERO. Mentre in Python, restituisce FALSE – Realdeo

+0

È equivalente a una sequenza molto lunga e complicata di conversioni condizionali a seconda dei tipi di argomento e dei loro valori in modi apparentemente arbitrari (e quindi quasi impossibili da semplificare). Vorrei scherzare. – delnan

risposta

5

Non ce n'è uno. È necessario convertire i tipi prima di verificare l'uguaglianza. Nel tuo esempio, si potrebbe fare

2==int("2") 
5

Python non costringere tra i tipi di strada PHP fa, la maggior parte .

Dovrete farlo in modo esplicito:

2 == int('2') 

o

str(2) == '2' 

Python costringe i tipi numerici (si può confrontare un galleggiante con un intero), e Python 2 anche auto-convertiti tra i tipi di stringhe Unicode e byte (a dispetto di molti).

1

Non c'è alcun equivalente.

La differenza è semplicemente che Python è fortemente digitato dove PHP non lo è, quindi un confronto tra due tipi in Python restituirebbe sempre false. A meno che non si invii espressamente il tipo dell'altra parte del confronto, naturalmente.

1

Si potrebbe anche avere

str(2) == "2" 
0

ecco l'equivalente di == di 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 

prova:

>>> php_equal(2, '2') 
True 

A causa di un diverso modello di oggetti e l'attuazione di matrice questo non è corretto al 100%, ma dovrebbe darti un'idea dei problemi che potrebbero verificarsi con la conversione automatica dei tipi di compa Rison.

+1

Che passa il test case nella domanda, ma è molto lontano dall'intero comportamento di PHP '=='. – delnan

+1

Non penso che funzionerebbe allo stesso modo di PHP '=='. Vedi la [tabella di confronto nella documentazione del manuale PHP] (http://us3.php.net/manual/en/types.comparisons.php). Guarda sotto "* Paragoni allentati con == *". –

0

Può essere questo qualcosa di simile:

x = 5 
y = "5" 

str(x) == str(y) 
True 

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

La risposta migliore che posso darvi è quello di evitare il confronto PHP-like. In ogni caso, ti porta a errori difficili da trovare e alle ore dedicate al debug.

Ma va bene se si desidera scrivere il proprio interprete PHP in Python.

Probabilmente si desidera eseguire il cast delle variabili per prime e confrontarle dopo. Se il programma non riesce a trasmettere, si verificano errori in precedenza per prevenire ulteriori danni.