【发布时间】:2012-08-04 11:41:12
【问题描述】:
对于我的一个站点,我需要检查多个类属性是否已定义且不为空。到目前为止,我很高兴地使用了if self.attr:,在我看来它是if self.attr is not None and self.attr is not '': 的简写,或者任何未定义的属性值。
这很好用,但在检查多个字符串属性时会产生令人惊讶的行为。 '' and '' 不是False(如我所料),而是''。
这引出了一个问题:是否存在and 运算符不强制类型转换为bool 的其他类型?
我想不出一个例子来说明这种行为差异会导致if-子句的实际结果不同(毕竟,'' 仍然计算为False),但我的直觉是有些极端情况可能是一个陷阱。
最后,我很想知道是否有人知道为什么要这样实施?我认为 Python 的 Zen 鼓励一种方式,而且只鼓励一种方式,+ 运算符似乎已经是字符串连接的直观方式。
【问题讨论】:
-
答案似乎没有涵盖这一点,重点是问题的布尔部分,但
and从不进行字符串连接;这根本不像+。
标签: python