`如果有什么东西`或`如果某些东西不是无'?

时间:2015-10-05 21:42:51

标签: python coding-style conventions

这是一段代码:

if resp.email is None or resp.email == "":

我认为以下内容更清楚:

if not resp.email:

第一个选项对第二个选项有什么优势吗?

我对第二个选项的主要担心是,如果resp.emailFalse"",则可能会隐藏错误。在生产代码中,这不是一个非常真实的场景吗?

在此问题上是否有广泛接受的标准或惯例

3 个答案:

答案 0 :(得分:1)

你应该始终瞄准简单(这也导致清晰),if something:if something is not None:(双阴性)更简单,所以你应该使用第一个。如果您遇到something有假值并且您想要检查该值与None的特定情况,您可以检查:if something is False:这不仅更清晰,而且更多明确的(因此读者更容易理解)。

通过写if A is not None:,你不向读者解释什么是价值领域 - 这使得它含蓄而含糊。

同样适用于if list:,这应该优于if len(list) > 0:,这不必要地冗长并使条件复杂化。

答案 1 :(得分:1)

没有一个普遍的答案,因为答案将取决于你想要做什么。

例如,在您的第一个示例中,我们说something = 0if something:评估为False,但if something is not None:将评估为True。空字符串,空列表等相同。

那么你在寻找任何不等于布尔值True的东西吗?使用第一个测试。另一方面,如果您只想排除None,请使用第二个。

编辑:好的,你完全改变了你的问题,但我的回答仍然有效。答案取决于天气与否0,False,[]等是有效值。我怀疑没有,所以我可能会使用if not测试。

答案 2 :(得分:-2)

根据:https://www.python.org/dev/peps/pep-0008/#programming-recommendations,由于可读性,似乎首选is not样式

编辑:

我确实意识到这不是完全相同的事情,因为你比较没有not None,但我觉得它的翻译方式相同(即,它仍然更具可读性)

对问题编辑的回应(空列表):

在上面的链接中实际提到了这种情况,并且"你应该使用空序列为假的事实:

if not list:

而不是:

if not len(list):