Python中if语句的评估顺序

时间:2018-08-31 12:41:42

标签: python python-3.x if-statement

所以我想我在正在处理的代码中发现了一个错字。我以为'not'将对字符串“ eta”进行操作,并使其为False,并且False不在列表中,因此不应该打印任何内容-但是在以下两种情况下都将打印“ Eta not found”。我想这与两个语句相等的评估顺序有关,对吧?

if not "eta" in ["alpha", "beta", "gamma"]:
   print ("Eta not found")

if "eta" not in ["alpha", "beta", "gamma"]:
   print ("Eta not found")

2 个答案:

答案 0 :(得分:3)

在两种情况下结果都是相同的,因为同一语句的语法略有不同应会导致结果相等,对吗?还有

if not "eta" in ["alpha", "beta", "gamma"]:

与以下相同:

if not ("eta" in ["alpha", "beta", "gamma"]):

等效于:

if ("eta" not in ["alpha", "beta", "gamma"]):

答案 1 :(得分:2)

innot具有higher precedence,因此not x in a的意思是not (x in a)。不过请记住两件事。

  • not in本身就是新运算符,而不仅仅是notin的结合。实际上,不可能not运算符必须后面跟一个表达式,而不是另一个运算符。
  • python解释器似乎将not x in a转换为x not in a