在Python 2.x中,为什么函数和int之间支持>操作符?

5 投票
1 回答
764 浏览
提问于 2025-04-18 06:46

在Python 2.x中,下面这段代码会产生一个错误,这是可以预料的:

>>> def a(x): return x+3 
...
>>> a+4
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'function' and 'int'

但是,下面的代码是可以运行的:

>>> a < 4
False

为什么加号(+)这个操作符不能用在函数和整数之间,而小于号(<)这个操作符却可以呢?

1 个回答

14

在Python 2中,默认情况下,所有对象都是可以比较大小的。只有一些特定的类型需要特别说明不支持比较(比如,complex类型在你尝试进行大小比较时会报错)。

CPython(最初的Python实现)会把None排在数字之前,然后把数字排在其他所有类型之前。如果一个对象没有自己定义比较规则,它会根据类型名称进行比较;比如,function类型会排在Zippedeedoodah类的实例之前。其他的Python实现可以选择不同的排序规则。

Python这样做是为了支持对不同类型的列表进行排序。引用一下值比较的文档

运算符<>==>=<=!=用于比较两个对象的值。这两个对象不需要是同一种类型。

默认的顺序比较(<><=>=)会给出一个一致但任意的顺序。

在Python 3中,只有那些明确支持比较的对象才能进行比较,其他的对象会抛出异常:

>>> def a(x): return x+3 
... 
>>> a < 4
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unorderable types: function() < int()

撰写回答