の違い私のサイトでは、いくつかのクラス属性が定義されていて空でないかどうかを確認する必要があります。これまでのところ、私はを喜んで使用しました。私の考えでは、if self.attr is not None and self.attr is not '':
の省略形であるか、属性の未定義値が何であれです。文字列と演算子:ベストプラクティス、+
これは問題なく動作しますが、複数の文字列属性をチェックすると驚くべき動作になります。 '' and ''
はFalse
(期待通り)ではなく、''
です。
これは、and
演算子がタイプキャストをbool
に強制しない他のタイプですか? この動作の違いがif
句の実際の異なる結果を引き起こす例を考え出すことはできません(結局のところ、''
はまだFalse
と評価されます)。しかし、傷が残っています罠になる。
最後に、なぜそれがそのように実装されたのか誰かが知っているかどうか知りたいですか?私は、PythonのZenが片方向と片方だけを奨励し、+
演算子がすでに文字列連結のための直感的な方法であると思っていました。
ここにコードを挿入できますか? –
答えはこれをカバーしていないようですが、質問のブール値の部分に焦点を当てていますが、 'and'は文字列の連結を決してしません。 '+'のようなものではありません。 – geoffspear
['' .join'を使用して '+'ではなく文字列を連結します。](http://stackoverflow.com/questions/1349311/python-string-join-is-faster-than-but-whats-wrong-ここ/ 1350289#1350289) – unutbu