PythonのboolはTrue
とFalse
true
、false
と小文字にするとエラーになる。
0
, 0.0
, []
, {}
, ""
, None
はbool化するとFalse
True
は、1
扱いにもなる
False
は、0
, 0.0
扱いにもなる
Bool化
bool(0)
bool(0.0)
bool([])
bool({})
bool("")
bool(None)
bool(1)
bool(2)
bool(-1)
None
はbool化するとFalse
- 数値は
0
以外はTrue
になる
==
==
演算子は「等価(同じ値)」かを比較する
True ==
True == True
True == False
True == None
True == 1
True == 2
数値は1
以外はTrue
にはならない
False ==
False == True
False == False
False == None
False == 0
False == 0.0
False == []
False == {}
False == ""
False == -1
[]
, {}
, ""
, None
はbool化するとFalse
だが、False
とは等しくない。(==
はFalse
になる)
None ==
None == True
None == False
None == None
None == 0
None == 0.0
None == []
None == {}
None == ""
None
と等しくなるのはNone
のときだけ。
is
is
演算子は「同一のオブジェクトか」を判定する
追記 is を判定していたプログラムに誤りがあり True is True
, False is False
, None is None
が False
になると書いていましたが、正確にはこれはら True
になるが正しいので記事を訂正しました。
True is
True is True
True is 1
True is True
は True
だが、
==
ではTrue
になっていた1
もis
演算子で比較するとFalse
False is
False is False
False is 0
False is 0.0
False is False
は False
だが、
False
も同様に==
ではになっていた 0
や 0.0
もis
演算子ではFalse
None is
None is None
None
は None == None
のときと同じで None is None
のときは True
int化
int(True)
int(False)
int(None)
True
は1
、False
は0
、int(None)
はエラーになる。
暗黙の型変換?が行われる処理だと、True
は1
、False
は0
として扱われる
True > False
3 + true
"7" - False
数値に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
[参考]