Python将0计算为False

TTT*_*TTT 12 python boolean

在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; 即使值没有隐含地转换boolif语句(它们是),False == 0也是如此.

  • “ 0 == False”是正确的,但并不完全相关,“ None == False”是错误的,但是“ if None:”仍然被*评估为虚假值(以及空映射等)。 (2认同)

dm0*_*514 13

0是python中的假值

虚假值:来自(2.7)文档:

任何数字类型的零,例如,0,0L,0.0,0j.


mgi*_*son 7

无论if条款内部是什么,都隐含地bool要求它.所以,

if 1:
   ...
Run Code Online (Sandbox Code Playgroud)

是真的:

if bool(1):
   ...
Run Code Online (Sandbox Code Playgroud)

bool调用__nonzero__1表示对象是否为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.
Run Code Online (Sandbox Code Playgroud)

1__bool__在python3.x上