Python 3.x 中长整型的 L 后缀
在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 中,所有的整数都是长整型。