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(そうです)、真です。ifFalse == 0
句の内部にあるものはすべて、if暗黙的boolにそれを呼び出しています。そう、
if 1:
...
本当に:
if bool(1):
...
オブジェクトがorであるかどうかを示す1をbool呼び出します__nonzero__TrueFalse
デモ:
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
>>>