Python 3.x 中长整型的 L 后缀

7 投票
1 回答
16321 浏览
提问于 2025-04-18 08:42

在Python 2.x中,长整型数字后面会有一个L的后缀。但在Python 3中,所有的整数都被视为长整型,所以这个后缀就被去掉了。根据Python 3.0的新特性

长整型的repr()输出不再包含结尾的L,所以如果有代码不加条件地去掉这个字符,就会把最后一个数字也去掉了。(应该使用str()来代替。)

从这里我理解到,repr()不会显示L后缀,但str()应该会有L后缀。然而在Python 3.3.3中,它们都没有显示L后缀。

Python 3.3.3 (v3.3.3:c3896275c0f6, Nov 18 2013, 21:19:30) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> repr(2 ** 64)
'18446744073709551616'
>>> str(2 ** 64)
'18446744073709551616'

根据文档,str()的输出不应该是18446744073709551616L吗?我在Python 3.1的新特性Python 3.2的新特性Python 3.3的新特性中没有找到任何说明说L后缀也从str()中去掉了。3.2中提到:

浮点数或复数的str()输出现在和它的repr()输出是一样的。

但它没有提到整数。

那么从哪个版本开始,L后缀也从str()中去掉了呢?还是我漏掉了什么明显的东西?

1 个回答

14

你可能误解了文档的意思。

这里的评论是针对那些想要去掉在 repr() 中出现的 L 的人,特别是在 Python 2 中。这些人其实可以直接使用 str(),这样就能得到同样的数字,而不需要每次都去掉 L

换句话说,在 Python 2 中,使用 str() 来处理长整型数字是更好的选择,因为它不会像 repr() 那样在数字后面加上 L

Python 2.7.6 (default, Apr 28 2014, 17:17:35) 
[GCC 4.2.1 Compatible Apple LLVM 5.1 (clang-503.0.40)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> print repr(1L)
1L
>>> print str(1L)
1

在 Python 3 中,无论是使用 repr() 还是 str(),都不会加上 L。这样做没有意义,因为在 Python 3 中,所有的整数都是长整型。

撰写回答