python3到底比python2更“可读”? [已关闭]

问题描述 投票:0回答:2

大多数谈论 python2 和 python3 之间差异的网站都提到了差异中的“语法易用性”:

除了提到 print 函数和 unicode 字符串之外,他们并没有真正解释为什么会出现这种情况,对我来说,这实际上并不构成重大的语法更改。当我阅读 python2 代码和 python3 代码时,它们对我来说看起来几乎相同。

谁能提供例子吗?

PS:我不明白为什么这个问题因为基于意见而被关闭。如果我问“我认为 python3 比 python2 更具可读性,你们觉得怎么样?”,这将是基于意见的。我正在陈述我在该主题上阅读的大多数网站的事实,我想了解为什么 python3 通常被认为比 python2 更具可读性(无论是因为 print 函数/unicode 字符串还是因为还有更多内容)。

python python-3.x python-2.7 readability
2个回答
0
投票

我发现许多问题都与可读性和处理不同类型文本数据的能力有关。

字符串和 Unicode

Python 2

在Python 2中,字符串有两种类型:str和unicode。默认字符串类型 (str) 是 ASCII,如果您想使用 Unicode 字符串,则必须在字符串前面加上 u 前缀,如下所示:

ascii_str = "hello"
unicode_str = u"hello"

这可能会令人困惑且容易出错,因为混合 str 和 unicode 会引发错误。例如,连接它们可能会出现问题:

# This will raise an error!
result = ascii_str + unicode_str

此外,在处理非 ASCII 字符时,您必须确保使用 unicode 或自己处理编码/解码。

# You must explicitly decode bytes
result = ascii_str + unicode_str.decode()

Python 3

在 Python 3 中,通过将所有字符串默认设置为 Unicode 来解决 str 和 unicode 之间的混淆。

unicode_str = "hello"

这意味着当您在 Python 3 中定义字符串时,它可以处理来自世界各地的大多数字符,而无需任何额外的麻烦。如果你想要一个字节字符串(相当于 Python 2 的 ASCII str),你可以在前面加上 b:

byte_str = b"hello"

这种明显的区别使得使用字符串变得更加容易,尤其是在处理国际字符时,而无需担心意外的编码错误。

可读性

  1. 显式性:在 Python 3 中,您显式地在 Unicode 字符串和字节字符串之间进行选择。这种明确性符合 Python 的核心原则之一:“显式优于隐式。”
  2. 一致性:由于 Python 3 中所有字符串默认都是 Unicode,因此在处理文本数据时提供了更一致的体验。在 Python 2 中,开发人员必须不断了解他们正在使用的字符串类型。
  • 错误处理:Python 3 使得引入与字符串编码相关的错误变得更加困难。在 Python 2 中,当无意中混合 str 和 unicode 或忘记对来自外部源的数据进行编码/解码时,经常会遇到 UnicodeEncodeError 或 UnicodeDecodeError。

-1
投票

使用python 3,你可以编写

my_var = 5
my_string = f"I have {my_var} apples"

而之前使用 python 2

my_var = 5
my_string = 'I have %s apples' % (my_var)

所以这至少是 python 3 更具可读性的一个例子。当有多个变量时,我发现 f 字符串更容易使用。

© www.soinside.com 2019 - 2024. All rights reserved.