在 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):
...
并bool
调用__nonzero__
1表示对象是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.
1__bool__
在 python3.x 上
我认为它只是以 0 或非 0 来判断:
>>> if 0:
print 'aa'
>>> if not 0:
print 'aa'
aa
>>>
首先,python 中的一切都是对象。因此,您的 0 也是一个对象,具体来说,是一个内置对象。
以下是被认为是错误的内置对象:
因此,当您将 0 置于 if 或 while 条件或布尔运算中时,将对其进行真值测试。
# call the __bool__ method of 0
>>> print((0).__bool__())
False
#
>>> if not 0:
... print('if not 0 is evaluated as True')
'if not 0 is evaluated as True'