Python if语句中的多个条件

时间:2017-02-07 12:50:04

标签: python

i = 200

j = 201

if i == 200 | j == 201:
    print "Hi"
else:
    print "No" 

它应该打印“嗨”,对吗?那么为什么打印“不”?

3 个答案:

答案 0 :(得分:2)

此处的问题实际上是运算符优先级之一,而不是使用按位|而不是逻辑or; True | TrueTrue or True会得到相同的结果。

根据Python docs,比较==的优先级低于按位|,因此您的条件表达式评估为:

i == (200 | j) == 201

这是假的。如果您添加了括号以澄清:

(i == 200) | (j == 201)

你会得到你期望的行为。

但是,正确的做法是使用or。使用or是有效的,因为没有括号,因为布尔运算符的优先级低于比较。此外:

  • 它更具可读性,因为它是表达你的意思的自然语言
  • 它短路,所以如果左侧是真的,右侧不需要评估
  • 它适用于更广泛的场景,其中按位操作为TypeError

答案 1 :(得分:0)

在Python中|&是按位运算符,它们进行位计算。

另一方面,andor是逻辑(布尔)运算符。

答案 2 :(得分:0)

|是一个按位运算符,在python脚本中进行位计算 使用此

i = 200

j = 201

if i == 200 or j == 201:
    print "Hi"
else:
    print "No"