Python无和条件

时间:2012-04-20 08:58:20

标签: python

我在这里有一些代码:

m = None
n = None

if not m:
    print "Something happens"
>>> Something happens

如果我这样做:

if not m and n:
    print "Something happens"

什么都没发生。

但我能做到:

m, n = 1,2
if m and n:
    print "Something happens"
>>> Something happens

为什么如果不以同样的方式处理? “如果不是”,不接受'和'陈述吗?

谢谢

3 个答案:

答案 0 :(得分:12)

您遇到operator precedence问题。

if not m and n相当于if (not m) and n。您想要的是if not m and not nif not (m or n)

另请参阅:De Morgan's Laws

答案 1 :(得分:2)

not应用于其closet操作数。您写了if not m and n not适用于m的{​​{1}},Trueandn评估为False因此整个陈述被评估为False

答案 2 :(得分:1)

我认为您正在寻找这篇文章:Truth Value Testing

  

可以测试任何对象的真值,用于if或while条件或下面布尔运算的操作数。以下值被视为false:

     
      
  •   
  •   
  • 任何数字类型的零,例如00L0.00j
  •   
  • 任何空序列,例如''()[]
  •   
  • 任何空映射,例如{}
  •   
  • 用户定义类的实例,如果类定义了__nonzero__()__len__()方法,则该方法返回整数零或bool值为False。
  •   
     

所有其他值都被认为是真的 - 因此许多类型的对象始终为真。   除非另有说明,否则具有布尔结果的操作和内置函数始终返回0False表示false,1True表示true。 (重要的例外:布尔运算或者并且始终返回其中一个操作数。)

特别是下一章解释了你的案例(Boolean Operations — and, or, not):

  

的优先级不低于非布尔运算符