if 语句中的一个或另一个

one or the other in if statement

首先我们有这个:

def some(a):
    if a is None or "*":
         print "*"
    else:
         print a

>>> some("*")
    *
>>> some("d")
    *

它失败了,但我无法给自己一个足够好的理由来说明它失败了。 显然是因为我写错了,一个有效的版本是:

def some(a):
    if a in [None, "*"]: # or write [ if a is None or a is "*" ]
         print "*"
    else:
         print a


   >>> some("*")
       *
   >>> some("d")
       d

虽然写出正确的版本几乎足够直观,但我无法向自己解释为什么第一个版本失败了。

那么问题来了,为什么第一个版本失败了?

这将始终评估为 True

 if a is None or "*":

如果你愿意,你可以这么说

 if a is None or a== "*":

以下语句不符合您的预期:

if a is None or "*":

这相当于:

if (a is None) or "*":

所以总是 True。要获得您想要的行为,请使用:

if a is None or a == "*":

声明:

if a is None or "*":

语义上的意思是

if ((a is None) is True) or (the value "*" is True)

作为非空字符串的值 "*" 总是 True。因此,整个表达式的计算结果为 True.