Per uno dei miei siti, ho bisogno di verificare se diversi attributi di classe sono definiti e non vuoti. Finora, ho felicemente utilizzato if self.attr:
, che nella mia mente è la scorciatoia per if self.attr is not None and self.attr is not '':
, o qualunque sia il valore indefinito dell'attributo.Stringhe e l'operatore e: best practice, differenze con +
Questo funziona correttamente, ma offre un comportamento sorprendente quando si controllano più attributi di stringa. '' and ''
non è False
(come mi aspettavo), ma ''
.
Questo solleva la domanda: ci sono altri tipi per cui l'operatore and
non impone un typecast a bool
? Non riesco a trovare un esempio in cui questa differenza di comportamento causerebbe un risultato diverso per la if
-clausa (dopotutto, ''
si valuta ancora su False
), ma sono rimasto con l'istinto che ci sono casi limite che potrebbero essere una trappola.
Infine, sarei desideroso di sapere se qualcuno sa perché è stato implementato in quel modo? Ho pensato che lo Zen di Python incoraggia solo in un modo e un modo solo, e l'operatore +
sembra già avere un modo intuitivo per la concatenazione di stringhe.
potresti inserire il codice qui? –
Le risposte non sembrano coprire questo, concentrandosi sulla parte booleana della domanda, ma 'e' non fa mai concatenazione di stringhe; non è come '+' affatto. – geoffspear
[Usa ''' .join' per concatenare le stringhe, non' + '.] (Http://stackoverflow.com/questions/1349311/python-string-join-is-faster-than-but-whats-wrong- qui/1350289 # 1350289) – unutbu