【问题标题】:Order of evaluation of if statement in Python [duplicate]Python中if语句的评估顺序[重复]
【发布时间】:2019-02-06 12:01:54
【问题描述】:

所以我想我在我正在处理的代码中发现了一个错字。我认为'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")

【问题讨论】:

  • 你的问题是什么?
  • if (not "eta") in ["alpha", "beta", "gamma"]: print ("Eta not found") :运行这个,这应该会让你清楚。

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


【解决方案1】:

两种情况下的结果是相同的,因为同一语句的稍微不同的语法应该会产生相同的结果,对吧?和

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

等同于:

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

相当于:

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

【讨论】:

    【解决方案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

    【讨论】:

    • 谢谢你澄清了我的疑问,不知道'not in'被认为是一个单独的运算符。
    • @physicist:它必须是这样的,请参阅编辑后的答案
    猜你喜欢
    • 2013-04-10
    • 1970-01-01
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    相关资源
    最近更新 更多