我遇到过这段代码:
counts = 128 * [0]
# some other steps here that modify the variable counts...
# in the end we have something like counts=[12, 583, 0, etc. , etc., 384]
for i in range(len(counts)):
if counts[i]:
outfile.write("%-12s%d\n" % (display(i), counts[i]))
关于if
语句,我知道引入它是为了在counts[i]==0
时跳过指令。这是因为0
相当于False
。但另一方面,我认为任何其他整数(除了1)都不等同于True
。事实上,如果我在shell上输入3 == True
,我会得到False
作为答案。那么,if <some integer>
等同于if True
是否有任何特殊原因?
答案 0 :(得分:5)
3 == True
将3-as-an-integer与True-as-a-boolean进行比较。
if 3:
正在强制转换为布尔值。
您会看到bool(3) == True
是真的。
答案 1 :(得分:3)
可以测试任何对象的真值,以便在if或while中使用 条件或下面的布尔运算的操作数。下列 值被视为错误:
None
False
- 任何数字类型的零,例如
0
,0L
,0.0
,0j.
- 任何空序列,例如
''
,()
,[]
。- 任何空映射,例如
{}
。- 用户定义的类的实例,如果类定义了
__nonzero__()
或__len__()
方法,则该方法返回 整数零或bool值为假。所有其他值都被视为正确 - 因此许多类型的对象始终为真。
答案 2 :(得分:0)
简单地在shell中尝试bool(3)
(True
)和bool(0)
(False
)。
bool
为零False
且bool
为非零为True
。