[解決済み] 論理的同一性 == True vs is True
疑問点
標準的な慣習として
if foo is None
ではなく
if foo == None
を使用することで、ある値が具体的に
None
.
ある値が正確かどうかを判断したい場合
True
(単に真に近い値ではなく)であるかどうかを判断したい場合、 何か理由があるのでしょうか?
if foo == True
ではなく
if foo is True
? これは、CPython (2.x and 3.x), Jython, PyPy などの実装によって異なるのでしょうか?
例: 例えば
True
がシングルトン値として使われ、その値を
'bar'
や他の真に近い値と区別したい場合に使用されます。
if foo is True: # vs foo == True
...
elif foo == 'bar':
...
を使用するケースはあるのでしょうか?
if foo is True
とは異なる結果になるのでしょうか?
if foo == True
?
注意:私が意識しているのは
Python boolean - if x:, vs if x == True, vs if x is True
. しかし、それは
if foo
,
if foo == True
または
if foo is True
は、一般に
foo
が真に近い値を持つかどうかを判断するために使われます。
UPDATE: によると PEP 285 § 仕様による。
FalseとTrueの値は、Noneと同様にシングルトンとなります。
どのように解決するのですか?
<ブロッククオートある値が正確に True であるかどうか (True に似た値であるかどうか) を判断したい場合、if foo is True ではなく if foo == True を使用する理由はありますか?
もしあなたが
foo
が本当にブーリアンであり、値が
True
演算子を使います。
それ以外の場合、もし型が
is
がそれ自身の
foo
と比較したときに真に近い値を返します。
__eq__()
と比較した場合、予期せぬ結果になってしまうかもしれません。
経験則から言うと、常に
True
という組み込み定数で
is
,
True
と
False
.
CPython (2.x and 3.x), Jython, PyPy などの実装によって異なるのでしょうか?
理論的には
None
よりも速いでしょう。
is
というのは、後者は型のカスタム
==
の実装を尊重する必要があり、一方
__eq__
はオブジェクトのID(例えば、メモリアドレス)を直接比較することができます。
様々なPythonの実装のソースコードを心得ているわけではありませんが、マジックメソッドの存在に対して何らかの内部フラグを使うことでその最適化ができるものがほとんどだと思いますので、実際には速度差は感じないのではないでしょうか?
関連
-
[解決済み] argparseによるブーリアン値のパース
-
[解決済み] ブーリアン値を格納するために使用するMySQLデータ型
-
[解決済み] シェルスクリプトでブール変数を宣言して使用するにはどうすればよいですか?
-
[解決済み] Pythonで文字列からbooleanに変換する?
-
[解決済み] C言語でのブーリアン値の使用
-
[解決済み] 3つのブール値のうち、少なくとも2つが真であるかどうかをチェックする
-
[解決済み] ブーリアンのトグルを行うには?
-
[解決済み】Djangoでnull=Trueとblank=Trueの違いは何ですか?
-
[解決済み] pandasのDataFrameから空のセルを含む行を削除する
-
[解決済み] Python の sorted() はどのようなアルゴリズムを使っているのですか?重複
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 2つの線分が交差しているかどうかを確認するにはどうすればよいですか?
-
[解決済み] Jupyterノートブックでenv変数を設定する方法
-
[解決済み] Pythonです。未束縛のメソッドを束縛する?
-
[解決済み] Pythonのキャッシュライブラリはありますか?
-
[解決済み] Pythonの要素別タプル演算(sumなど
-
[解決済み] Python 3でバイナリデータを標準出力に書き込むには?
-
[解決済み] pycharmがタブをスペースに自動変換する
-
[解決済み] Python 言語を決定するには?
-
[解決済み] djangoのQueryDictをPythonのDictに変更するには?
-
[解決済み] Pythonの "is "演算子を理解する