Python コンソールで:
>>> a = 0
>>> if a:
... print "L"
...
>>> a = 1
>>> if a:
... print "L"
...
L
>>> a = 2
>>> if a:
... print "L"
...
L
なぜこれが起こるのですか?
Python では、bool
は のサブクラスでありint
、False
値は0
; です。ステートメントで値が暗黙的にキャストされていない場合でもbool
(そうです)、真です。if
False == 0
句の内部にあるものはすべて、if
暗黙的bool
にそれを呼び出しています。そう、
if 1:
...
本当に:
if bool(1):
...
オブジェクトがorであるかどうかを示す1をbool
呼び出します__nonzero__
True
False
デモ:
class foo(object):
def __init__(self,val):
self.val = val
def __nonzero__(self):
print "here"
return bool(self.val)
a = foo(1)
bool(a) #prints "here"
if a: #prints "here"
print "L" #prints "L" since bool(1) is True.
__bool__
python3.x では1
0か0でないかで判断するだけだと思います:
>>> if 0:
print 'aa'
>>> if not 0:
print 'aa'
aa
>>>