【问题标题】:Why has the type unicode been removed from python 3 [closed]为什么从 python 3 中删除类型 unicode [关闭]
【发布时间】:2016-06-11 16:45:22
【问题描述】:

如果我们比较python版本2和3中的bytesstrunicode类型,我们可以看到

  • bytes 类型的使用方式完全相同。
  • str 类型的含义从 bytes 的别名更改为编码的 unicode 字符串(替换以前的 unicode 类型)
  • unicode 类型仅在 python 2 中使用,而在 python 3 中它被删除以支持重新定义 str 的含义

在编写应该与 python 2 和 python 3 兼容的代码时,最困难的任务之一是正确处理 unicode 字符串,因为没有一种类型可以在两个版本中工作。另一方面,处理字节数组很简单,因为在两个版本中都有一个bytes 类型。

据我了解,在 python 3 中引入类型 unicode 作为 str 的别名非常容易。这样,开发人员可以在两个版本中使用明确的类型名称。一旦不再需要 python 2 兼容性,将unicode 重构为str 将很简单。

这里的问题不是解决问题的最佳方法。我正在寻找的是为什么unicode 类型必须消失的解释。

【问题讨论】:

  • 因为它本来就不应该存在。 Python 3000 是/曾经是关于修复错误。
  • 是的,并不是每个人都相信添加它是一种更好的改变。
  • “在编写应该与 python 2 和 python 3 兼容的代码时……” 问:你确定这是一个合理的目标吗? 特别是关于 Unicode????
  • u 前缀只是 Python 3 中的一个 noop - 它帮助人们编写 2/3 应用程序始终使用 unicode。谁反对?

标签: python python-2.7 python-3.x unicode


【解决方案1】:
  1. Ignacio Vazquez-Abrams 已经给了你关于你所说的问题的基本答案:

    问:“...为什么类型 unicode 必须消失”?

    答:“因为它本来就不应该存在。Python 3000 是/曾经是关于修复错误的。”

  2. Wayne Werner 详细阐述:

    答:“u 前缀只是 Python 3 中的一个 noop - 它可以帮助编写 2/3 应用程序的人始终使用 unicode。谁反对?”

  3. 这引出了一个问题“问:为什么你在尝试编写“Python 2 和 Python 3 之间兼容的代码”??那是 不是 必须要做的合理的事情。Python 2 和 Python 3 之间的不兼容性不是任意的 - 它们是DELIBERATE尤其是关于“Unicode”!

  4. 以下是 Guido van Rossum 完全重新思考 Python 3 的“Unicode”的理由:

  5. 以下是您应该如何对待 Unicode - 在任何新的、仅限 Python 3.0 的代码中 - 向前发展:

希望对你有帮助!

【讨论】:

  • 3.因为有充分的理由为第 3 方插件和用户提供平稳过渡期,没有理由故意为他们制造障碍。不反对将数据和文本分开是一件好事。但这并不能解释为什么没有一种类型可以在两个版本中始终如一地工作(无论这种类型可能有什么名称)。
  • 如果你想为你的客户做正确的事,你真的应该为每个插件提供 两个 版本:一个用于 Python2,另一个用于 Python3。这就像试图销售一种汽车燃料的混合物——一种既适用于汽油车,也适用于柴油发动机的混合物。只是不要这样做。恕我直言...
  • PS:一篇关于 Python2 与 Python3 辩论的有趣文章:The Gravity of Python 2
  • 这篇文章中的想法非常有趣。它还提到了多语言应用程序作为前进的方向。在编写多语言代码时,明确的类型不会只有优点而没有缺点吗?我认为不提供的唯一原因是故意强迫人们不要编写多语言代码。但这甚至不是不可能的,只是更糟。
  • 实际上,我确实没有将 Martijn Faassen 关于多语言应用程序的 cmets 解释为“前进的道路”。恰恰相反。他说如果你可以写到Python3,那么你应该(没有多语言)。如果您正在考虑使用多语言,但您并不绝对需要 Python3,那么您应该只编写Python2(同样,没有多语言)。我的理解是,Faassen 将多语种视为一种有时是必要的邪恶,一种不得已而为之的解决方案。恕我直言。再说一遍:我强烈的感觉是 - 一切都是平等的 - 并行库比多语言库更可取。,.
猜你喜欢
  • 1970-01-01
  • 2013-11-15
  • 2018-06-26
  • 1970-01-01
  • 2014-07-28
  • 1970-01-01
  • 1970-01-01
  • 2020-07-25
  • 2011-11-14
相关资源
最近更新 更多