PythonのboolはTrueとFalse
true、falseと小文字にするとエラーになる。
0,0.0,[],{},"",Noneはbool化するとFalseTrueは、1扱いにもなるFalseは、0,0.0扱いにもなる
Bool化
bool(0) # False bool(0.0) # False bool([]) # False bool({}) # False bool("") # False bool(None) # False bool(1) # True bool(2) # True bool(-1) # True
Noneはbool化するとFalse- 数値は
0以外はTrueになる
==
==演算子は「等価(同じ値)」かを比較する
True ==
True == True # True True == False # False True == None # False True == 1 # True True == 2 # False
数値は1以外はTrueにはならない
False ==
False == True # False False == False # True False == None # False False == 0 # True False == 0.0 # True False == [] # False False == {} # False False == "" # False False == -1 # False
[], {}, "", Noneはbool化するとFalseだが、Falseとは等しくない。(==はFalseになる)
None ==
None == True # False None == False # False None == None # True None == 0 # False None == 0.0 # False None == [] # False None == {} # False None == "" # False
Noneと等しくなるのはNoneのときだけ。
is
is演算子は「同一のオブジェクトか」を判定する
追記 is を判定していたプログラムに誤りがあり True is True, False is False, None is None が False になると書いていましたが、正確にはこれはら True になるが正しいので記事を訂正しました。
True is
True is True # True True is 1 # False
True is True は True だが、
==ではTrueになっていた1もis演算子で比較するとFalse
False is
False is False # True False is 0 # False False is 0.0 # False
False is False は Falseだが、
Falseも同様に==ではになっていた 0 や 0.0 もis演算子ではFalse
None is
None is None # True
Noneは None == None のときと同じで None is None のときは True
int化
int(True) # 1 int(False) # 0 int(None) # TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'
Trueは1、Falseは0、int(None)はエラーになる。
暗黙の型変換?が行われる処理だと、Trueは1、Falseは0として扱われる
True > False # true 3 + true # 4 "7" - False # => TypeError: unsupported operand type(s) for -: 'str' and 'bool'
数値にTrueを足すのは+1と同じ扱いになる。
javascriptのように- 0で数値化はできない。
PythonのTrueとFalseはRubyのfalseとnilの時だけfalseで後はtrueに比べて、ちょっと複雑でした。
特にbool(2)はTrueだけど、2 == TrueはFalseとかはちょっと紛らわしい...
==, is の比較を試してみたコード
def ifEq(v): arg = [True, False, None, 0, 0.0, 1, 2, -1, [], {}, ""] str_v = str(v) for val in arg: if v == val: print(f"{str_v} == {str(val)} # True") else: print(f"{str_v} == {str(val)} # False") def ifIs(v): arg = [True, False, None, 0, 0.0, 1, 2, -1, [], {}, ""] str_v = str(v) for val in arg: if v is val: print(f"{str_v} is {str(val)} # True") else: print(f"{str_v} is {str(val)} # False") print("\n>> True ==") ifEq(True) print("\n>> False ==") ifEq(False) print("\n>> None ==") ifEq(None) print("---------------") print("\n>> True is") ifIs(True) print("\n>> False is") ifIs(False) print("\n>> None is") ifIs(None)
実行してみることができます 👉 Online PHP/Java/C++... editor and compiler | paiza.IO
[参考]

- 作者:Jennifer Campbell,Paul Gries,Jason Montojo,Greg Wilson
- 発売日: 2010/07/23
- メディア: 大型本