Pythonの書

本当は整数? boolの正体を暴く!

それでは今回は、boolオブジェクトを少しだけ詳しくやっていきましょう。

 

そんなに複雑なことをするオブジェクトではないと思うので、本当に軽くだけやっていきます。(´∀`*)

 

 

定義 厳密に言うと?(・∀・)??

まず、boolTrueFalseしか表せないオブジェクトですが、整数として扱われています

 

具体的には、True = 1False = 0として扱われています。

 

例を見てみましょう。

bool_int.py

copy

#!/usr/bin/env python
#cording:UTF-8
a = False

print("a =", a)
print("a == 0 =", a == 0)
print("True + 1024 =", True + 1024)

 

とプログラムすると、

 

console

copy

a = False
a == 0 = True
True + 1024 = 1025

 

と出力されました。

 

これを見ると、abool値のFalseでありながら、0と同じ値でもあるということを示しています。

 

また、整数値1024との加算も問題なく行うことができ、True(つまり整数値1)を足すことで1025が計算されていることがわかります。

 

 

では、算術計算や比較演算はbool値のどこを見て行っているのでしょうか。

 

これまで学んできた知識を総動員して確かめてみましょう!

 

bool_int.py

copy

#!/usr/bin/env python
#cording:UTF-8

print("dir(bool()) == dir(int()) =", dir(bool()) == dir(int()))
print("False.real =", False.real)

 

とプログラムしてみました。

 

すると、

 

console

copy

dir(bool()) == dir(int()) = True
False.real = 0

 

と出力されました。

 

1行目の出力では1つ目のboolの属性がintの属性と同じことを示しています。

 

つまり、前回示したようにint型と同じくbool型にもreal属性があるということです。

 

このreal属性は数値を複素数で表した場合の実部に対応する値が格納されている変数で、整数では同じ値がそのまま格納されることになります。

 

そこで、False(bool型)のreal属性を見ると、0が格納されているということがわかります。

 

これが、bool型を整数で表した場合の数値に対応するので、整数値との計算ではここの値を使って計算されていると予想できます。

 

まあ、bool型は基本的にその値が10かを確認するために使うので、あまり他の数値との計算方法を知る必要はないと思いますが……。

 

 

ついでに、boolintbool()int()は別物ですので気を付けてください。

 

属性は同じようでdir(bool) == dir(bool())Trueを返しますが、bool.real == bool().realFalseを返します。

 

 

おまけ ( *´艸`)

最後におまけですが、今回のことを理解すると次のようなことができます。

 

bool_int.py

copy

#!/usr/bin/env python
#cording:UTF-8

print("((False == 1).real == 0).real =", ((False == 1).real == 0).real)

 

とプログラムすることで、

 

console

copy

((False == 1).real == 0).real = 1

 

という出力を得ることができます。

 

まあ、この書き方を覚える必要は全くありませんが、使うとプログラムを読んだ人を混乱の渦に突き落とすことができます!!(ΦωΦ)フフフ

 

bool型はある命題が真か偽かを判断するときに使うので、if文for文などの条件記述で一番使われると思います。

 

これとビット演算子を一緒に使うことでより自由に条件整理を行えますが、それはまた条件を扱うあたりで説明しようと思います。

 

 

今回はここまでです。

 

boolはあまり特別説明するような内容はないので、今回はかなり遊びに近い内容でしたね。

 

知らなくても全然問題ない内容ですが、知っておくと少し面白いコードが書けることもあるかな?と思います。

 

あ、最後の奴は下手に使うと自分でプログラムを読み返した時にもめちゃくちゃ読みにくくて困ることになるので、ご利用は計画的に。(´∀`;)

 

では、また~。(*・ω・)ノ

カテゴリー:, ,
%d人のブロガーが「いいね」をつけました。