論理型(bool)の使い方
- Pythonの論理型は、TrueまたはFalseの値で表される
- ある特定の比較式を記載した場合、TrueまたはFalseの値を論理型(bool)で返される
pythonの論理型(bool)は、「True」と「False」の二つに分かれていて、条件文によく利用される。
また、and, or, notなどともよく併用する。
条件文についてはこちらに詳細に記載しているが、if (条件) : (プログラム)などと書き、条件がTrueの場合に実行され、Falseの場合実行されないプログラムのことを言う。
Example
- boolにTrueを格納して利用
type(bool_true) # <class 'bool'>
if bool_true: # Trueの場合は実行される(条件文)
print("true") # 条件文が実行され、「true」と表示される。
- boolにFalseを格納して利用
if bool_false:
print("False") # 条件文が実行されず、「False」は表示されない。
- 比較式の結果を変数に格納
if bool_true:
print("true") # 条件文が実行され、「true」と表示される。
bool_false = 1 > 2 # 1 > 2は誤っているため、bool_falseにFalseが代入される
if bool_false:
print("False") # 条件文が実行されず、「False」は表示されない。
- andを利用した場合(両方Trueの場合のみTrue)
bool_true = (2 > 1) and (3 > 1) # 2 > 1と3 > 1は両方正しいため、bool_trueにはTrueが代入される
if bool_true:
print("True") # 条件文が実行され、「True」と表示される。
bool_false = (2 > 1) and (1 > 1)# 2 > 1は正しいが、1 > 1は誤っているため、bool_falseにFalseが代入される。
if bool_false:
print("False") # 条件文が実行されず、「False」は表示されない
- orを利用した場合(どちらかTrueの場合はTrue)
bool_true = (1 > 1) or (3 > 1) # 1 > 1は誤っているが、3 > 1は両方正しいため、bool_trueにはTrueが代入される
if bool_true:
print("True") # 条件文が実行され、「True」と表示されない
bool_false = (0 > 1) or (1 > 1) # 0 > 1も1 > 1は誤っているため、bool_falseにFalseが代入されない
if bool_false:
print("False") # 条件文が実行されず、「False」は表示されない
- notを利用した場合(式がTrueの場合False,式がFalseの場合True)
boolTrue = not (0 > 1) # 0 > 1はFalseだが、not が前についているためboolTrueにはTrueが格納される
boolFalse = not (3 > 1) # 3 > 1はTrueだが、not が前についているためboolFalseにはFalseが格納される
boolコンストラクタを用いた他クラスからの型変換
boolコンストラクタを用いて、他クラスからboolクラスへ型変換することができる。
例えば、数値の0をboolコンストラクタで型変換(bool(0))行うと、bool型のFalseになる。
他にも、文字列型、リスト型、辞書型等、様々なクラスの型から型変換することができる。
各クラスから型変換をした場合、どのようなboolの値になるのか、下記にまとめた。
型 | bool()の実行結果 |
---|---|
数値(int, float) | 0または、0.0の場合はFalseになり、それ以外はTrue |
文字列(str) | 空の文字列はFalseになり、それ以外はTrue |
リスト(list) | 空のリストはFalseになり、それ以外はTrue |
タプル(tuple) | 空のタプルはFalseになり、それ以外はTrue |
辞書(dict) | 空の辞書はFalseになり、それ以外はTrue |
セット(set) | 空のセットはFalseになり、それ以外はTrue |
実際にコードを用いると以下のようになる。
- example
Example
- boolコンストラクタを利用したintのboolへの型変換
bool_value = bool(int_value) # int_valueは12(0以外)のため、bool_valueにはTrueが入る
type(bool_value) # class bool
int_value = 0
bool_value = bool(int_value) # False
- boolコンストラクタを利用したstrのboolへの型変換
bool(str_value) # False
str_value = 'hello'
bool(str_value) # True
では、boolコンストラクタを実行すると実際に内部的にはどのような動作をしているのか、内部では__bool__メソッドが呼ばれています。
次に__bool__メソッドについて見ていきましょう。
__bool__メソッドの実装
boolコンストラクタを用いると、引数とした対象インスタンスの__bool__メソッドが呼び出されて実行されます。
そして、呼び出された__bool__メソッド内の返り値がTrue または Falseであります。
自身でクラスを作成した場合に、__bool__メソッドを実装することもできて、その場合には、boolコンストラクタで指定した返り値を返すことができるようになります(__bool__メソッドには、必ず返り値をつけるようにしなければなりません)
- example
Example
- __bool__メソッドの実装とコンストラクタの利用
def __init__(self, name):
self.name = name
def __bool__(self):
print('bool実行')
if self.name == 'Taro': # 名前がTaroの場合はTrueを返すようにする
return True
else:
return False
man1 = Man('Taro')
bool(man1) # 名前がTaroのためTrueが返される。
man2 = Man('Jiro') # 名前はJiroのためFalseが返される
以上、論理型(bool)について詳細に説明しました。