繁体   English   中英

不同类型的Python min()参数

[英]Python min() of arguments with different types

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

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

文档尚不清楚,它只是说min()接受“最小的参数”。 实际上如何确定最小的元素?

它通过使用常规规则比较它们来确定这一点。 如果对象是不同类型的,并且不能进行合理的比较(因为它们都不实现所需的特殊方法,或者因为实现与其他对象的类型不兼容),则按类型赋予它们一致的顺序; 例如,所有整数均小于所有字符串。 尝试: 1 < "1"

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

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

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

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

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

规则是:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM