2013-03-02 50 views
0

最近我惊讶地发现,你可以在Python中取得不同类型的参数min(),并且不会得到ValueError。Python min()不同类型的参数

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

这个文档还不清楚 - 它只是说min()取“最小的参数”。它如何确定哪个元素是最小的?

回答

0

在Python 2中,存在任意但可预测的值与不同类型的比较。我认为这是类似名称的字典对比的东西(整数<浮点数< strs <元组)。

1

它通过使用通常的规则比较它们来确定这一点。如果对象是不同的类型,并且不能进行明智的比较(因为它们都不实现所需的特殊方法,或者实现不与另一个对象的类型一起工作),那么它们按类型被赋予一致的顺序;例如,所有整数都小于全部字符串。试试看:1 < "1"

(顺便说一句,布尔值作为整数的子类实现,并且可以用数字来比较,所以他们会为您解决False为0,True为1)

有人实施这样,如果你排序一个包含各种类型的列表,就像类型一起排序。然而,在Python 3中,这已经改变了,你不能再隐式地比较不同类型。

0

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

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

rule是:

如果两个都是数字,它们将转换为一个共同的类型。否则,不同类型的对象总是比较不平等,并且被一致但任意地排序。