2

在 Python 2.x 中,使用反引号从 int 对象获取十进制字符串是可怕的吗?因为反引号是repr(),不是str()吗?我在回答这个问题时注意到了这一点。

在 Python 源代码中,它们在 Python 源代码intobject.c中具有相同的功能

(reprfunc)int_to_decimal_string,            /* tp_repr */
....
(reprfunc)int_to_decimal_string,            /* tp_str */

你怎么看?

4

3 回答 3

7

好吧,我不会说它“可怕”,但我觉得它不正确,至少有四个原因:

  1. str(my_number)my_number比用反引号包围更清楚地表明你的意图。(参见Python Zen of Python中的“可读性很重要” )。

  2. 用 C 语言实现 Python 只是一种可能的实现。有 Jython、IronPython、PyPy 等,除非 Python 规范中有明确的声明repr()并且str()对于整数对象是相同的,否则我不会依赖这种行为。

  3. Python 3.x 中没有反引号。

  4. 如果您的数字碰巧太大以至于无法用 表示int,Python 会自动将其提升为长整数,并且为此repr()str()有所不同。

看这个例子:

>>> x = 1234567890
>>> y = x ** 3
>>> `y`
'1881676371789154860897069000L'
>>> str(y)
'1881676371789154860897069000'
于 2010-05-17T10:03:12.513 回答
2

是的。对任何事情使用反引号是可怕的。

你有str(i),你有'%d' % i,你有.format(i);如果你想要repr那么直接用repr()or%r或其他方式这么说。

使用反引号从来没有充分的理由,它们只是使代码的可读性降低并且更难解析。它们在 Python 3 中消失了。

于 2010-05-17T10:06:17.367 回答
0

2.X:对任何事情使用反引号是可怕的。根据需要使用 repr() 或 str()。

3.X:反引号消失了!三声欢呼!!

于 2010-05-17T10:08:31.387 回答