[解決済み] なぜboolはintのサブクラスなのですか?
質問
python-memcachedを通してmemcachedにboolを格納するとき、それが整数として返されることに気づきました。ライブラリのコードをチェックすると、以下の場所があることがわかりました。
isinstance(val, int)
がチェックされ、値が整数であることをフラグしていることがわかりました。
そこで、pythonのシェルでテストしてみたところ、以下のことに気がつきました。
>>> isinstance(True, int)
True
>>> issubclass(bool, int)
True
しかし、なぜ
bool
のサブクラスである
int
?
booleanは基本的に2つの値を取ることができるintでありながら、実際の整数よりもはるかに少ない演算とスペースしか必要としない(演算なし、1ビットのストレージスペースのみ)ので、それはちょっと意味があります...。
どのように解決するのですか?
のコメントから http://www.peterbe.com/plog/bool-is-int
<ブロッククオートPythonにbool型が追加された頃(2.2か2.3の頃)にいたのなら、完全に論理的な話です。 が追加された時 (2.2 か 2.3 の頃) にいたなら、完全に論理的です。
実際のbool型が導入される以前は、0と1が真理値の公式表現でした。 C89 と同様に、0 と 1 が公式の真理値表現でした。C89 と同様に 理想的ではないが動作しているコードを不必要に壊さないために、新しいbool型は0と1のように動作する必要がありました。 これは単に真理値だけではありません。 のように動作する必要があります。誰もbool型の結果を数値の文脈で使うことを勧めないでしょう。 の結果を数値のコンテキストで使用することを推奨する人はいませんし、ほとんどの人は、真偽値を決定するために 真理値を決定するために等号をテストすることを推奨する人はいません。 既存のコードがどれだけそのようなものであるか、誰も苦労して見つけようとはしませんでした。そこで 真と偽はそれぞれ1と0に見せかけることにしました。これは単に 言語進化の歴史的な産物に過ぎません。
この素敵な説明のためにdman13に謝意を表します。
関連
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み] 文字列をfloatやintにパースするにはどうしたらいいですか?
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] なぜlist.join(string)ではなくstring.join(list)なのでしょうか?
-
[解決済み] Pythonのクラスはなぜオブジェクトを継承するのですか?
-
[解決済み] mixinとは何か、なぜ有用なのか?
-
[解決済み] Pythonで16進文字列をintに変換する
-
[解決済み】なぜPythonはこのJSONデータをパースできないのですか?[終了] PythonがこのJSONデータをパースできないのはなぜですか?
-
[解決済み】boolのprintfフォーマット指定子とは?
最新
-
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でのAWS Lambdaのインポートモジュールエラー
-
[解決済み] dict を txt ファイルに書き、それを読み取る?
-
[解決済み] データフレームをソートした後にインデックスを更新する
-
[解決済み] 値で列挙名を取得する [重複]。
-
[解決済み] python-requests モジュールからのすべてのリクエストをログに記録します。
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
-
[解決済み] Python Logging でログメッセージが2回表示される件
-
[解決済み] Pythonの文字列書式をリストで使う
-
[解決済み] 新しいpip backtrackingの実行時問題の解決
-
[解決済み] pipの依存性/必要条件をリストアップする方法はありますか?