既非真亦非假的 Python 事物

标签 python boolean

我刚找到这个:

a = (None,)
print (a is True)
print (a is False)
print (a == True)
print (a == False)
print (a == None)
print (a is None)
if a : print "hello"
if not a : print "goodbye"

产生:

False
False
False
False
False
False
hello

所以 a 既不是,也不等于 True 或 False,但在 if 语句中充当 True。

为什么?

更新:

实际上,我刚刚意识到这并不像我想象的那么晦涩。对于 a=2,我也得到了相同的结果(尽管对于 a=0 或 a=1,它们分别被认为等于 False 和 True,但不是)

最佳答案

我发现这里几乎所有的解释都没有帮助,所以再试一次:

这里的混淆是基于用“is”、“==”和“if”进行的测试是三种不同的东西。

  • "is"测试身份,即是否是同一个对象。在这种情况下显然不是这样。
  • “==”测试值相等性,显然唯一具有 True 和 False 值的内置对象是 True 和 False 对象(任何数字类型的数字 0 和 1 除外)。<

重要的部分来了:

  • 'if' 测试 boolean 值。这意味着无论你给它什么表达式,它都会被转换为 True 或 False。你可以用 bool() 做同样的事情。 bool((None,)) 将返回 True。文档中列出了将评估为 False 的内容(此处由其他人链接)

现在也许这在我脑海中更加清晰,但至少我尝试过。 :)

关于既非真亦非假的 Python 事物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1584733/

相关文章:

c++ - 循环不正常

C++ boolean 求值

sql - access sql 查询中的 YES/NO 字段类型是什么?

python - 检查 IP 地址

Python `map` 和参数解包

Java 返回一个 boolean 错误

algorithm - 在我的递归方法中继续越界以导航并查找 4X4 矩阵中的所有字母组合

python - 如何使用 Pydantic 解析模型列表

python - Google App Engine - NDB - 在多条记录上设置属性值

python - 由于 AttributeError,我无法使用 south 同步数据库