Python中if条件非True却触发执行?求技术解释
为什么非布尔值的after_id能触发if条件?
Python的if语句判断的是值的“真值性”,而非严格等于True。在Python中,只有以下几类值会被判定为假值:
FalseNone- 数值类型的0(包括
0、0.0、0j等) - 空的序列或集合(比如
''、[]、{}、()) - 自定义类中实现了
__bool__或__len__方法并返回假值的对象
除此之外的所有对象,都会被if判定为真值,即使它们本身不是布尔类型,也不等于True。
回到你的代码:root.after()方法返回的是一个非零整数类型的任务ID,这个值不属于上述假值范畴,因此在if after_id判断时会被视为真值,触发后续代码块。而after_id == True为False,是因为Python中只有整数1才会和True相等(True本质是1的布尔子类实例),但after_id返回的是更大的整数,所以严格相等判断不成立。
你可以在代码里加两行验证:
print(type(after_id)) # 输出 <class 'int'> print(bool(after_id)) # 输出 True
内容的提问来源于stack exchange,提问作者Zac Waldman
相关产品推荐
相关产品推荐

