0

我最近很惊讶地发现你可以在 Python 中使用不同类型的参数的 min() 而不会得到 ValueError。

min(3, "blah") ==> 3
min(300, 'zzz') ==> 300

文档对此并不清楚 - 它只是说 min() 采用“最小的参数”。它实际上是如何确定哪个元素最小的?

4

3 回答 3

1

它通过使用通常的规则比较它们来确定这一点。如果对象具有不同的类型并且无法进行合理比较(因为它们都没有实现所需的特殊方法,或者实现不适用于另一个对象的类型),那么它们按类型给出一致的顺序;例如,所有整数都小于所有字符串。试试看:1 < "1"

(顺便说一下,布尔值被实现为整数的子类,并且可以与数字进行比较,因此它们False将按 0 和True1 排序。)

它以这种方式实现,因此如果您对包含各种类型的列表进行排序,类似的类型将被一起排序。但是,在 Python 3 之前的版本中,这已更改,您不能再隐式比较不同的类型。

于 2013-03-02T00:05:28.583 回答
0

在 Python 2 中,存在对不同类型的值进行任意但可预测的比较。我认为这类似于类型名称的字典比较(ints < floats < strs < tuples )。

于 2013-03-02T00:04:18.640 回答
0

根据 Python 的排序定义是正确的:

>>> 3 < "blah"
True
>>> 300 < 'zzz'
True

规则是:

如果两者都是数字,则将它们转换为通用类型。否则,不同类型的对象总是比较不相等,并且顺序一致但任意。

于 2013-03-02T00:06:01.543 回答