Python无和if条件

Python无和if条件,python,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 hap

我这里有一些代码:

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
为什么“如果”和“如果”的处理方式不同?“如果不”,不接受“和”语句吗

谢谢

您有问题

如果不是m和n
相当于
如果(不是m)和n
。您想要的是
如果不是m和n
如果不是(m或n)


另请参见:

未应用于其密室操作数。您编写了
如果不是m和n
,其中
not
适用于
m
,这是
真的
,并且由于
n
的计算结果为
,因此整个语句的计算结果为
,我想您正在寻找这篇文章:

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

  • 没有
  • 假的
  • 任何数字类型的零,例如,
    0
    0L
    0.0
    0j
  • 任何空序列,例如,
    '
    ()
    []
  • 任何空映射,例如,
    {}
  • 用户定义类的实例,如果该类定义了一个
    \uuuu非零\uuuuuu()
    \uuuu len\uuuuu()
    方法,则该方法返回整数零或布尔值False
所有其他值都被认为是真的-因此许多类型的对象总是真的。 除非另有说明,否则具有布尔结果的操作和内置函数始终返回
0
False
表示False,返回
1
True
表示True。(重要例外:布尔运算或and始终返回其一个操作数。)

特别是下一章将解释您的案例():

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


如有疑问,请插入括号。有时我想知道,如果语言要求您在任何可能存在问题的情况下使用显式分组,会节省多少时间。您可能需要花费几秒钟的时间输入extra(),但第一次输入时可以节省更多的时间,从而避免了像这样的混淆。然后你会浪费两倍的时间坐在冷水机旁用这种愚蠢的语言抱怨所有的(),只是想我会加上一个词:operator preference-.@MichaelJ.Barber-hehe,尽管无意中对Lisp最大的抱怨是所有的(),所以我的理论是正确的:)我在某个地方看到,使用身份与无身份进行比较是一种很好的做法。e、 g.:
如果m是None,n不是None: