【问题标题】:When to use `<>` and `!=` operators?何时使用 `<>` 和 `!=` 运算符?
【发布时间】:2014-12-15 07:12:46
【问题描述】:

在这方面找不到太多信息。试图比较 2 个值,但它们不能相等。就我而言,它们可以(并且经常)大于或小于。

我应该使用:

if a <> b:
   dostuff

if a != b:
   dostuff

This page 表示它们很相似,这意味着它们至少有一些不同。

【问题讨论】:

  • 不知道在 Python 中到底是怎么做的,但我觉得 应该只用于数字(不能用于组合字符串),!= 用于两者。
  • 好吧,我认为&lt;&gt; 将首先进行两次压缩a&gt;ba&lt;b,如果两者都为假,则相等时为真。但是!= 情况下只有一个比较,即不相等。
  • 我的想法完全正确。在我的例子中,ab 都是数字。两者都可以为空,所以 最有意义,因为我不关心 b 是否为空。

标签: python python-2.7 python-3.x comparison-operators python-internals


【解决方案1】:

引用Python language reference

比较运算符&lt;&gt;!= 是同一运算符的替代拼写。 != 是首选拼写; &lt;&gt; 已过时。

所以,它们都是同一个,但!=&lt;&gt; 更受欢迎。

我尝试在 Python 2.7.8 中反汇编代码

from dis import dis
form_1 = compile("'Python' <> 'Python'", "string", 'exec')
form_2 = compile("'Python' != 'Python'", "string", 'exec')
dis(form_1)
dis(form_2)

得到以下结果

  1           0 LOAD_CONST               0 ('Python')
              3 LOAD_CONST               0 ('Python')
              6 COMPARE_OP               3 (!=)
              9 POP_TOP
             10 LOAD_CONST               1 (None)
             13 RETURN_VALUE

  1           0 LOAD_CONST               0 ('Python')
              3 LOAD_CONST               0 ('Python')
              6 COMPARE_OP               3 (!=)
              9 POP_TOP
             10 LOAD_CONST               1 (None)
             13 RETURN_VALUE

&lt;&gt;!= 都生成相同的字节码

              6 COMPARE_OP               3 (!=)

所以它们都是一回事。

注意:

&lt;&gt; 在 Python 3.x 中被删除,根据 the Python 3 Language Reference

引用official documentation

!= 也可以写成&lt;&gt;,但这只是为了向后兼容而保留的过时用法。 新代码应始终使用!=

结论

由于 &lt;&gt; 在 3.x 中被删除,并且根据文档,!= 是首选方式,最好不要使用 &lt;&gt;

【讨论】:

  • 好的,但是如果b 不能为空怎么办?使用&lt;&gt; 听起来像两个变量都必须有一个值
  • @JeremyDavis 在官方文档中提到,&lt;&gt;!= 的另一种说法。所以&lt;&gt;!=之间绝对没有区别。但我们应该更喜欢!=
  • @JeremyDavis 请检查包含的反汇编字节码以进行确认。
  • 两个变量都必须有一个值,否则在计算运算符之前你会得到一个 NameError (意味着一个变量不存在,而不是它为空)。 Python 没有空值; None 只是一个不等于其他值的值。
  • 为这个答案付出了值得称赞的努力。然而,简短的回答是永远不要使用&lt;&gt;
【解决方案2】:

只要坚持!=

&lt;&gt; 已过时!请查看最近的 python 参考手册。

【讨论】:

    猜你喜欢
    • 2011-05-30
    • 1970-01-01
    • 2013-05-14
    • 2015-04-20
    • 1970-01-01
    • 2012-07-26
    • 2013-08-10
    • 2019-06-06
    • 2011-07-09
    相关资源
    最近更新 更多