PythonのboolはTrue
とFalse
true
、false
と小文字にするとエラーになる。
0
,0.0
,[]
,{}
,""
,None
はbool化するとFalse
True
は、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
- メディア: 大型本