Python无和条件

Nee*_*ran 3 python

我这里有一些代码:

m = None
n = None

if not m:
    print "Something happens"
>>> Something happens
Run Code Online (Sandbox Code Playgroud)

如果我做:

if not m and n:
    print "Something happens"
Run Code Online (Sandbox Code Playgroud)

什么都没发生.

但我能做到:

m, n = 1,2
if m and n:
    print "Something happens"
>>> Something happens
Run Code Online (Sandbox Code Playgroud)

为什么如果和不处理相同的方式?"如果不是",不接受'和'陈述?

谢谢

jtb*_*des 12

您有运算符优先级问题.

if not m and n相当于if (not m) and n.你需要的是if not m and not nif not (m or n).

另见:德摩根定律

  • 如有疑问,请添加括号。我有时想知道,如果语言要求您在任何可能存在问题的情况下使用显式分组,会节省多少时间。你会花几秒钟的时间输入额外的 (),但第一次避免像这样令人困惑的事情时你会节省更多。那么你会浪费两倍的时间坐在饮水机旁用这种愚蠢的语言抱怨所有的()...... (3认同)

gec*_*cco 6

我想您正在寻找这篇文章:真值测试

\n\n
\n

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

\n\n
    \n
  • 没有任何
  • \n
  • 错误的
  • \n
  • 任何数字类型的零,例如0, 0L, 0.0, 0j
  • \n
  • 任何空序列,例如\'\', (), []
  • \n
  • 任何空映射,例如{}.
  • \n
  • 用户定义类的实例,如果该类定义了__nonzero__()or__len__()方法,则该方法返回整数零或布尔值 False。
  • \n
\n\n

所有其他值均被视为 true \xe2\x80\x94,因此许多类型的对象始终为 true。\n 除非另有说明,具有布尔结果的运算和内置函数始终返回0or Falsefor false 和1or Truefor true。(重要的例外:布尔运算 or 和 始终返回其操作数之一。)

\n
\n\n

特别是下一章解释了您的情况(布尔运算 \xe2\x80\x94 and, or,not):

\n\n
\n

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

\n
\n