python - 为什么 int(50)<str(5) 在 python 2.x 中?

标签 python comparison int python-2.x string

在 python 3 中,int(50)<'2'导致 TypeError ,它应该。然而,在 python 2.x 中,int(50)<'2'返回 True (其他数字格式也是如此,但是 int 在 py2 和 py3 中都存在)。那么,我的问题有几个部分:

  1. 为什么 Python 2.x(<3?)允许这种行为?
    • (谁认为允许这个开始是个好主意???)
  2. int 是什么意思?小于 str
    • 它指的是ord吗?/chr
    • 有没有一些不太明显的二进制格式?
  3. '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 ..

  1. 我不知道。
    • 醉酒的主人。
  2. 这意味着已经对内置类型引入了正式命令。
    • 指的是任意顺序。
    • 没有。
  3. 没有。为此目的,字符串和 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/

相关文章:

python - 从Django ORM中高效提取大量数据

python - 如何使用 matplotlib 绘制这样的图

swift - 检查重复项(随机数)

python - 如何从另一个函数内部执行字符串内部的函数?

python - cleaned_data 和普通数据有什么区别? - Django

comparison - Boost bjam 与 GNU make

将 char 数组转换为 int 数组?

java - 'int' 类型的大数组需要传递给通用数组和集合

excel - 优化 VBA 脚本以组合和整合

java - 将文本拆分为句子并将句子拆分为单词 : BreakIterator vs regular expressions