[解決済み] Pythonで「0, 0 == (0, 0)」が「(0, False)」となるのはなぜか?
2022-09-02 17:02:45
疑問点
Pythonの場合(Python 3.6で確認しましたが、それ以前のバージョンでも同じように動作するはずです)。
(0, 0) == 0, 0 # results in a two element tuple: (False, 0)
0, 0 == (0, 0) # results in a two element tuple: (0, False)
(0, 0) == (0, 0) # results in a boolean True
しかし
a = 0, 0
b = (0, 0)
a == b # results in a boolean True
なぜ2つのアプローチで結果が異なるのでしょうか?等号演算子はタプルの扱いが違うのでしょうか?
どのように解決するのですか?
最初の2つの式は両方ともタプルとしてパースされます。
-
(0, 0) == 0
(これはFalse
) が続き、その後に0
-
0
の後に0 == (0, 0)
(これはまだFalse
のような感じです)。
式がこのように分割されるのは、カンマ区切りと等号演算子の相対的な優先順位が異なるからです。Pythonは2つのタプル間の等値性テストではなく、2つの式を含むタプルを、そのうちの1つがたまたま等値性テストであると見なします。
しかし、2つ目のステートメントのセットでは
a = 0, 0
はできません
はタプルであるべきです。タプルは値の集まりであり、等号テストとは異なり、代入はPythonでは値を持ちません。代入は式ではなく、ステートメントです。タプルや他の周囲の式に含めることができる値を持ちません。もしあなたが以下のようなことを試したなら
(a = 0), 0
のように、タプルとして強制的に解釈しようとすると、シンタックスエラーが発生します。タプルの変数への代入を残す - これは次のように書くことでより明示的にすることができます。
a = (0, 0)
- の唯一の有効な解釈として
a = 0, 0
.
ということで、括弧がなくても、代入先の
a
への割り当てに括弧がなくても、それと
b
に値が割り当てられます。
(0,0)
というように
a == b
は、したがって
True
.
関連
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み] と "is "は違うのですか?
-
[解決済み】if __name__ == "__main__": は何をするのでしょうか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] django.db.migrations.exceptions.InconsistentMigrationHistory
-
[解決済み] virtualenv の `--no-site-packages` オプションを元に戻す。
-
[解決済み] Pythonの検索パスを他のソースに展開する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pythonのマルチプロセッシングプールimap_unorderedの呼び出しの進捗を表示しますか?
-
[解決済み] googletransがエラー 'NoneType' オブジェクトに 'group' 属性がない、と言って動かなくなった。
-
[解決済み] Pythonのargparseを使った隠し引数の作成
-
[解決済み] Jupyter (IPython)ノートブックのセッションをpickleして保存する方法
-
[解決済み] virtualenv の `--no-site-packages` オプションを元に戻す。
-
[解決済み] if 節の終了方法
-
[解決済み] Python 言語を決定するには?
-
[解決済み] Pythonの文字列の前にあるbという接頭辞は何を意味するのですか?
-
[解決済み] pipの依存性/必要条件をリストアップする方法はありますか?
-
[解決済み] Alembicアップグレードスクリプトでインサートやアップデートを実行するにはどうすればよいですか?