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.
@frostnational No, non lo è. – thefourtheye
Vero. Ma in PHP. Anche se il tipo di variabile è diverso, restituisce VERO. Mentre in Python, restituisce FALSE – Realdeo
È 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