在Python 2.x中,使用反引号从int对象获取十进制字符串是可怕的吗?

YOU*_*YOU 2 python python-2.x backticks

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

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

(reprfunc)int_to_decimal_string,            /* tp_repr */
....
(reprfunc)int_to_decimal_string,            /* tp_str */
Run Code Online (Sandbox Code Playgroud)

你怎么看?

Tam*_*más 7

好吧,我不会说这是"可怕的",但我觉得它至少有四个原因是不对的:

  1. str(my_number)my_number用反引号更清楚地表明你的意图.(参见Python的Zen中的 "可读性计数" ).

  2. 在C中实现Python只是一种可能的实现; 有Jython,IronPython,PyPy等等,除非在Python规范中有一个显式语句,repr()并且str()对于整数对象是相同的,我不会依赖于这种行为.

  3. 反引号在Python 3.x中消失了.

  4. 如果你的数字太大而无法用a来表示,那么intPython会自动将它提升为一个长整数,为此,repr()它会str()有所不同.

看这个例子:

>>> x = 1234567890
>>> y = x ** 3
>>> `y`
'1881676371789154860897069000L'
>>> str(y)
'1881676371789154860897069000'
Run Code Online (Sandbox Code Playgroud)