在 python 3 中,int(50)<'2'
导致 TypeError
,它应该。然而,在 python 2.x 中,int(50)<'2'
返回 True
(其他数字格式也是如此,但是 int
在 py2 和 py3 中都存在)。那么,我的问题有几个部分:
- 为什么 Python 2.x(<3?)允许这种行为?
- (谁认为允许这个开始是个好主意???)
int
是什么意思?小于str
?- 它指的是
ord
吗?/chr
? - 有没有一些不太明显的二进制格式?
- 它指的是
'5'
之间有区别吗?和u'5'
在这方面?
最佳答案
它的工作原理是这样的1。
>>> float() == long() == int() < dict() < list() < str() < tuple()
True
数量比容器少。数值类型被转换为通用类型,并根据它们的数值进行比较。容器按其名称的字母值进行比较。2
来自docs :
CPython implementation detail: Objects of different types except numbers are ordered by >their type names; objects of the same types that don’t support proper comparison are >ordered by their address.
不同内置类型的对象按类型名称的字母顺序比较 int
以 'i' 和 str
开头以 s
开头所以任何 int
小于任何 str
.罢工>.
- 我不知道。
- 醉酒的主人。
- 这意味着已经对内置类型引入了正式命令。
- 指的是任意顺序。
- 没有。
- 没有。为此目的,字符串和 unicode 对象被认为是相同的。试试看。
回应关于 long < int
的评论
>>> int < long
True
您可能指的是那些类型的值,在这种情况下,数字比较适用。
1 这一切都在 Python 2.6.5 上
2 感谢 kRON 帮我解决了这个问题。我从没想过要将数字与 dict
进行比较数字之前和比较是其中一个非常明显但很容易被忽视的事情。
关于python - 为什么 int(50)<str(5) 在 python 2.x 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4266918/