在Python控制台中:
>>> a = 0
>>> if a:
... print "L"
...
>>> a = 1
>>> if a:
... print "L"
...
L
>>> a = 2
>>> if a:
... print "L"
...
L
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
Woo*_*ble 20
在Python中,bool是一个子类int,并且False具有值0; 即使值没有隐含地转换bool为if语句(它们是),False == 0也是如此.
无论if条款内部是什么,都隐含地bool要求它.所以,
if 1:
...
Run Code Online (Sandbox Code Playgroud)
是真的:
if bool(1):
...
Run Code Online (Sandbox Code Playgroud)
并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.
Run Code Online (Sandbox Code Playgroud)
1__bool__在python3.x上