如果a或b解释

时间:2018-12-13 14:19:51

标签: python syntax

a = None

b = 'Test'

if a is None or b is None:
    print('Test')

此版本显然可以运行,但是:

if (a or b) is None:
   print('Test')

预期结果将相同,但其结果为False,为什么?

3 个答案:

答案 0 :(得分:5)

在Python中,or语句不仅返回TrueFalse,还返回它的第一个参数"truthy"

在您的代码中,评估(a or b) is None时会发生以下情况:

  1. None是虚假的,而aNone,因此a or b返回b
  2. b不是None
  3. (a or b) is None解析为False

答案 1 :(得分:4)

布尔表达式的运算符优先级和求值规则在Python中的工作方式有些不同。这不是您想像的那样:

(a or b)

上述条件是询问评估None的结果是否为None,并且当前值为a和{{1}时,它永远不会是b }; a or b将返回'Test'b的值),因为aNone。如果要测试两个值之一是否为None,则只有第一种语法有效:

a is None or b is None

请注意,在Python中,x or y将返回第一个非假表达式的值,而None[]{},{{1} },''0被认为是错误的。如果您要稍微缩短表达式,则相当于您的代码的第一个版本:

False

答案 2 :(得分:0)

如果要简短,可以使用以下结构:

if None in (a, b):
    print('Test')

请注意,尽管这在大多数情况下都适用,但该表达式并不完全等同于a is None or b is None,而是a == None or b == None。参见explanation,了解为什么这不是同一件事。