if语句

时间:2017-11-16 23:18:17

标签: python if-statement logical-operators

首先我们有这个:

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

尽管只写出正确的版本几乎是直观的,但我无法向自己解释为什么第一个版本失败。

所以问题是,为什么第一个版本失败了?

3 个答案:

答案 0 :(得分:3)

声明:

if a is None or "*":

语义上意味着

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

作为非空字符串的值"*"始终为True。因此,整个表达式将评估为True

答案 1 :(得分:1)

这将始终评估为True

 if a is None or "*":

如果你想要

,你可以这么说
 if a is None or a== "*":

答案 2 :(得分:1)

以下陈述不符合您的期望:

if a is None or "*":

这相当于:

if (a is None) or "*":

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

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