为什么python max('a',5)返回字符串值?字符串值、max、python、amp

2023-09-03 11:09:18 作者:你╮这么近那么远つ

回溯ValueError: cannot convert float NaN to integer我发现这行:

max('a', 5)
max(5, 'a')

将返回a而不是5。

在Python中使用Elasticsearch

在上面的案例中,我使用了示例字符串a,但在我的实际案例中,该字符串是NaN(无法收敛的拟合过程的结果)。

这种行为背后的理由是什么?为什么PYTHON不能自动识别那里有一个字符串并且它应该返回数字?

更奇怪的是min()是否按预期工作,因为:

min('a', 5)
min(5, 'a')

返回5

推荐答案

在Python2中,数值始终排在字符串和几乎所有其他类型之前:

>>> sorted(['a', 5])
[5, 'a']
因此,

数字被认为比字符串小。当使用max()时,这意味着在数字上选取字符串。

数字较小是任意的实现选择。请参阅Comparisons documentation:

运算符<>==>=<=!=比较两个对象的值。对象不需要具有相同的类型。如果两者都是数字,则会将它们转换为通用类型。否则,不同类型的对象总是比较不相等,并且排序一致但任意。

强调我的。

Python2非常努力地使异类类型可排序,这导致了许多难以调试的问题,例如程序员试图将整数与字符串进行比较,却得到了意外的结果。Python3更正了这个错误;您将得到一个TypeError

>>> max(5, 'a')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unorderable types: str() > int()

我已经written elsewhere about the ordering rules,甚至re-implemented the Python 2 rules for Python 3,如果您真的想要那些东西的话。