ho refactoring del codice piuttosto crufty e sono imbattuto nel seguente costrutto piuttosto strana:if (foo o bar o baz) è Nessuno:
#!/usr/bin/env python2.7
# ...
if (opts.foo or opts.bar or opts.baz) is None:
# (actual option names changed to protect the guilty)
sys.stderr.write("Some error messages that these are required arguments")
... e mi chiedevo se questo sarebbe mai dare un senso immaginabile.
ho cambiato in qualcosa di simile a:
#!/usr/bin/env python2.7
if None in (opts.foo, opts.bar, opts.baz):
# ...
ho fuoco di un interprete ed effettivamente provare il primo costrutto ... sembra solo a lavorare se i valori sono tutte false e l'ultimo dei questi valori falsi sono Nessuno. (In altre parole, l'implementazione di CPython sembra restituire il primo vero o l'ultimo valore falso da una catena di espressioni o).
ho ancora il sospetto che il codice corretto dovrebbe utilizzare il qualsiasi() o tutti() built-in che sono stati aggiunti 2.5 (il codice in questione richiede già 2.7). Non sono ancora sicuro di quale sia la semantica preferita/intenzionale poiché sto iniziando questo progetto.
Quindi c'è qualche caso in cui questo codice originale avrebbe senso?
Questo è terribile. fai attenzione a non introdurre un nuovo bug risolvendolo :) –