python - 为什么我们需要 str 类型?为什么不只是字节串?

标签 python python-3.x unicode

Python3 有 unicode 字符串 (str) 和 bytes。我们已经有了字节串文字和方法。为什么我们需要两种不同的类型,而不仅仅是各种编码的字节串?

最佳答案

您问题的答案取决于“需要”一词的含义。

我们当然不需要 str 类型,因为我们可以使用该类型计算的所有内容我们也可以在没有它的情况下计算(正如您从措辞良好的问题中了解的那样)。

但我们也可以从方便的角度来理解“需要”。有一个 sqrt 函数不是很好吗?还是 logexpsin?你可以自己写这些,但何必呢?标准库设计者会添加有用且方便的函数。

语言本身也是如此。我们“需要”一个 while 循环吗?不是真的,我们可以使用尾递归函数。我们“需要”列表理解吗? Python 中的很多东西都不是原始的。就此而言,我们是否“需要”高级语言。 John von Neumann himself once asked "why would you want more than machine language?"

strbytes也是一样。 str 类型虽然不是必需的,但却是一个很好的、省时的、方便的东西。它为我们提供了一个作为字符序列的界面,这样我们就可以逐个字符地操作文本,而无需:

  • 我们必须自己编写所有的编码和解码逻辑,或者
  • 使用多组迭代器(如 each_byteeach_char)使字符串接口(interface)膨胀。

如您所料,我们可以有一种公开字节序列和字符序列的类型(就像 Ruby 的 String 类所做的那样)。 Python 设计者希望将这些用法分离成两种不同的类型。您可以非常轻松地将一种类型的对象转换为另一种类型的对象。通过拥有两种类型,他们表示关注点(和用法)的分离比拥有更少的内置类型更重要。 Ruby 做出了不同的选择。

TL;DR 这是语言设计中的偏好问题:通过不同的类型而不是通过对同一类型的不同方法来分离关注点。

关于python - 为什么我们需要 str 类型?为什么不只是字节串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45250632/

相关文章:

java - 如何在 Android 中支持 unicode 字体?

python - 将 MATLAB 代码转换为 Python 的工具

python - 如何检测多个屏幕

python-3.x - 使用 urllib.request.urlretrieve 部分下载文件

python - 如何根据 CPU 的限制处理多进程

c++ - 在 MessageBoxW c++ 中显示一个变量

java - Java 输出中未显示泰语

python - 值错误 : Invalid placeholder in string

python - Pandas:写入 Excel 在 Databricks 中不起作用

python - Range对象不支持赋值