Questo non fa quello che ti aspetti:
if var is 'stringone' or 'stringtwo':
dosomething()
E 'lo stesso di:
if (var is 'stringone') or 'stringtwo':
dosomething()
che è sempre vero, dal momento 'stringtwo
è considerato un valore "vero".
ci sono due alternative:
if var in ('stringone', 'stringtwo'):
dosomething()
Oppure si può scrivere i test di uguaglianza separati,
if var == 'stringone' or var == 'stringtwo':
dosomething()
non uso is
, perché is
confronta identità di un oggetto. Potresti farla franca a volte perché Python internizza un sacco di stringhe, proprio come potresti farla franca in Java perché Java mette a disposizione un sacco di stringhe. Ma non utilizzare is
a meno che non si desideri realmente l'identità dell'oggetto.
>>> 'a' + 'b' == 'ab'
True
>>> 'a' + 'b' is 'abc'[:2]
False # but could be True
>>> 'a' + 'b' is 'ab'
True # but could be False
fonte
2012-10-08 01:32:20
Sono abbastanza sicuro che entrambi gli errori siano stati trattati in precedenza. –
per la distinzione is/==: http://stackoverflow.com/questions/1504717/python-vs-is-comparing-strings-is-fails-sometimes-why – tanantish