为什么Python 2会对待<>有效吗?它有什么作用?

时间:2016-01-27 03:46:05

标签: python

我今天正在审查一些代码,看到我认为是一个错字:

if foo <> bar:
    # do stuff

但是,我很惊讶地发现Python2似乎将<>视为有效:

% python -c 'print 1<>2'
True

此外,我无法辨别<>返回TrueFalse的原因:

In [16]: 1 <> 2
Out[16]: True

In [17]: 2 <> 1
Out[17]: True

In [18]: 1 <> None
Out[18]: True

In [19]: 1 <> "foo"
Out[19]: True

In [20]: None <> 1
Out[20]: True

In [21]: None <> None
Out[21]: False

In [22]: False <> 1
Out[22]: True

我的一个猜测是Python正在使用<>运算符,而我却成了一些布尔铸造恶作剧的受害者,但事实并非如此。 < >无效,><

In [29]: 1 >< 2
  File "<ipython-input-29-0e35e3b94016>", line 1
    1 >< 2
       ^
SyntaxError: invalid syntax

In [30]: 1 < > 2
  File "<ipython-input-30-8f2ba3fa3c6c>", line 1
    1 < > 2
        ^
SyntaxError: invalid syntax

最后,Python 3对这个&#34;运算符#34; (或者应该叫它的任何东西):

% python3 -c 'print(1<>2)'
  File "<string>", line 1
    print(1<>2)
            ^
SyntaxError: invalid syntax

那么,是什么给出的? <>在做什么?它是什么?为什么它在Python 3中无效?

1 个答案:

答案 0 :(得分:4)

这是一种传统的写作方式!=。不要在新代码中使用它。正如你已经看到的那样,它已经在python3.x中删除了(可能是因为&#34;应该有一个 - 最好只有一个 - 明显的方式来做它。&#34;因为没有人用过它运营商: - )。

可以找到文档here

  

表单<>!=是等效的;为了与C保持一致,!=是首选;在!=下面提到<>的地方也被接受。 <>拼写被视为过时