在Python控制台中:
>>> a = 0
>>> if a:
... print "L"
...
>>> a = 1
>>> if a:
... print "L"
...
L
>>> a = 2
>>> if a:
... print "L"
...
L
为什么会这样?
答案 0 :(得分:17)
在Python中,bool
是int
的子类,False
的值为0
;即使值未在bool
语句中隐含地转换为if
(它们是False == 0
,{{1}}也是如此。
答案 1 :(得分:12)
答案 2 :(得分:7)
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.
python3.x上的 1 __bool__
答案 3 :(得分:0)
我认为它只是判0或0:
>>> if 0:
print 'aa'
>>> if not 0:
print 'aa'
aa
>>>
答案 4 :(得分:0)
首先,python中的所有内容都是一个对象。因此,您的0也是一个对象,特别是内置对象。
以下是被视为false的内置对象:
因此,当您在if或while条件或布尔运算中将0放入时,将测试其真值。
# 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'