【问题标题】:python None and equals evaluationpython无和等于评估
【发布时间】:2020-10-28 02:13:42
【问题描述】:

如果我运行以下 Python 3.7 代码

a=None
b=None
a==b
>> True
b is not None
>> False
True is not None
>> True
a==b is not None
>> False

因为 a==b 是 True,这让我明白这段代码的计算结果为 A==B,其中 A=a 和 B=b 不是 None

但是,如果我运行以下代码

a = datetime(2020,1,1)
b = datetime(2020,1,1)
a==True
>> False
b is not None
>> True
a==b is not None
>> True

它与上述矛盾。所以我对如何评估这一切感到有点困惑。

感谢您的帮助!

【问题讨论】:

  • 第一个示例 a==b is not None 扩展为 a==b and b is not None => True and False => False。第二个例子扩展a==b and b is not None => True and True => True
  • 表达式的扩展是为什么 Python 允许您编写 a < b < c,它变成 a < b and b < c 而大多数其他语言只是从字面上尝试将 a < b 布尔值与 c 进行比较并得到废话。

标签: python operators python-3.7


【解决方案1】:

您在示例中看到了运算符链接,

a==b is not None

相当于:

a==b and b is not None

结果就是这样。

如果要比较a==b,请使用原子表达式:

(a==b) is not None

详情请参阅6.10. Comparisons。 简而言之,a op1 b op2 c ... y opN z 等价于 a op1 b and b op2 c and ... y opN z,只是每个表达式最多计算一次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    相关资源
    最近更新 更多