对于我的一个站点,我需要检查多个类属性是否已定义且不为空。到目前为止,我很高兴地使用if self.attr:
了 ,在我看来它是 的简写if self.attr is not None and self.attr is not '':
,或者属性的未定义值是什么。
这很好用,但在检查多个字符串属性时会产生令人惊讶的行为。'' and ''
不是False
(如我所料),而是''
.
这就引出了一个问题:是否存在其他类型的and
运算符不强制类型转换的类型bool
?我想不出一个例子,这种行为差异会导致 - 子句的实际结果不同if
(毕竟,''
仍然评估为False
),但我直觉认为存在可能是陷阱的边缘情况。
最后,我很想知道是否有人知道为什么要这样实施?我认为 Python 的 Zen 鼓励一种方式,而且只鼓励一种方式,而+
运算符似乎已经是字符串连接的直观方式。