Pythonのbool型について

Pythonのbool型について詳しく書いていきます。

Pythonのbool型はint型のサブクラス

Pythonのbool型はint型のサブクラスであり、Trueは1と等価、Falseは0と等価です。このことは、あまり良い設計とは言えませんが、そうなっているものは仕方ないですね。

print(type(True))
# <class 'bool'>

print(type(False))
# <class 'bool'>

print(issubclass(bool,int))
# True

boolからintへの変換

boolをintへ変換すると次のようになります。

print(int(False))
# 0

print(int(True))
# 1

intからboolへの変換

整数値の場合、0はfalsy、0以外がtruthyなので、以下のようになります。

print(bool(0))
# False

print(bool(2))
# True

print(int(bool(2)))
# 1
// intをboolに変換してintに戻すと元の値になるとは限らない。

x = 2
print(int(bool(x))==x)
# False

bool型に対して数値演算ができる

bool型はint型のサブクラスなのでintとして振る舞うことができます。足し算、引き算、sumなど、intでできることはすべてできます。(サブクラスなので当たり前ですね)

print(True == 1)
# True

print(False == 0)
# True

print(True*5)
# 5

print(sum([True, False, True, True]))
# 3

float型,complex型への型変換

True,Falseは1,0と等価なのでint型はもちろん、float型、complex型へ変換することもできます。

print(int(True))
print(int(False))
# 1
# 0

print(float(True))
print(float(False))
# 1.0
# 0.0

print(complex(True))
print(complex(False))
# (1+0j)
# 0j

str型への変換

str()で文字列”True”,”False”に変換できる。print()では見分けがつきにくいですが、type()を通すとstr型であることがわかります。

print(str(True))
print(str(False))
# True
# False

print(type(str(True)))
print(type(str(False)))
# <class 'str'>
# <class 'str'>

str型からbool型に変換

str型はsequenceであり、空でないsequenceはtruthyであるから、次のようにしてbool型に戻すことはできません。

※ sequenceについて詳しくは、こちら。→ Pythonのsequenceについて

print(bool(str(False)))
# True
これでは戻せない

print(str(False)=="True")
# False
// bool型に戻したいなら、=="True"とするのが正解

listやtupleへの変換

listやtupleはiterableからでないと変換できません。boolはiterableではありません。

print(list(True))
# 'bool' object is not iterable

print(tuple(True))
# 'bool' object is not iterable

またlistやtupleはsequenceなので、bool型に変換できます。(空のsequenceはFalse,空でないときはTrueです) → Pythonのsequenceについて

(Visited 39 times, 1 visits today)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です