Python:在randint(100000000000000000009999999999999)的结果末尾不包含“L”

Python:在randint(100000000000000000009999999999999)的结果末尾不包含“L”,python,python-2.7,Python,Python 2.7,到目前为止,我发现: from random import randint randint(100000000000000000000, 999999999999999999999) 输出为: 922106555361958347898L 但我不希望我在那里 我只能在结尾没有L的情况下将其用作int 更新 如果目标是简单地得到一个30位长的随机数,那么生成两个小数字,然后将它们合并是更好的主意吗?如果您在交互式提示符上,请显式打印该值。值的repr有一个L,但值的str没有 >&g

到目前为止,我发现:

 from random import randint
 randint(100000000000000000000, 999999999999999999999)
输出为:

922106555361958347898L
但我不希望我在那里

我只能在结尾没有L的情况下将其用作int

更新


如果目标是简单地得到一个30位长的随机数,那么生成两个小数字,然后将它们合并是更好的主意吗?

如果您在交互式提示符上,请显式打印该值。值的repr有一个L,但值的str没有

>>> 922106555361958347898
922106555361958347898L
>>> print 922106555361958347898
922106555361958347898

如果在交互式提示下,请显式打印该值。值的repr有一个L,但值的str没有

>>> 922106555361958347898
922106555361958347898L
>>> print 922106555361958347898
922106555361958347898
这里之所以有一个L,是因为它太大了,不适合整数,*所以它是一个长的。有关更多详细信息,请参见文档中的

那么,你为什么要得到那个L,你如何摆脱它

Python有两种不同的方法将值转换为字符串表示形式:

返回规范的源代码表示形式,或者类似的内容。 返回友好的表示形式。 例如,对于字符串,str'abc'是abc,而repr'abc'是abc

对于long,str1L是1,而repr1L是1L

在交互式提示下键入表达式时,它使用repr。但是当您使用print命令时,它使用str。因此,如果您想查看不带L的值,只需打印它:

例如,如果要将字符串保存在变量中或写入文件,则必须显式调用str

但是如果你只是想把它当作一个数字,你根本不用担心这个问题;这是一个数字,从Python2.3开始,int和long值可以自由混合

如果您试图将其存储在MySQL数据库中,那么无论您使用哪种MySQL接口,只要它们适合列类型,您都不会关心是给它int值还是long值**

或者您可以升级到Python3.x,在那里不再有单独的长类型,所有整数都是int,不管有多大,也没有L后缀

*确切的截止值在任何地方都没有记录,但至少对于CPython来说,它是适合您平台上的C long的。因此,在大多数64位平台上,最大值为1之所以有L,是因为它太大,无法放入int中,*所以它是一个长值。有关更多详细信息,请参见文档中的

那么,你为什么要得到那个L,你如何摆脱它

Python有两种不同的方法将值转换为字符串表示形式:

返回规范的源代码表示形式,或者类似的内容。 返回友好的表示形式。 例如,对于字符串,str'abc'是abc,而repr'abc'是abc

对于long,str1L是1,而repr1L是1L

在交互式提示下键入表达式时,它使用repr。但是当您使用print命令时,它使用str。因此,如果您想查看不带L的值,只需打印它:

例如,如果要将字符串保存在变量中或写入文件,则必须显式调用str

但是如果你只是想把它当作一个数字,你根本不用担心这个问题;这是一个数字,从Python2.3开始,int和long值可以自由混合

如果您试图将其存储在MySQL数据库中,那么无论您使用哪种MySQL接口,只要它们适合列类型,您都不会关心是给它int值还是long值**

或者您可以升级到Python3.x,在那里不再有单独的长类型,所有整数都是int,不管有多大,也没有L后缀


*确切的截止值在任何地方都没有记录,但至少对于CPython来说,它是适合您平台上的C long的。因此,在大多数64位平台上,最大值为1REPL中的输出有一个L后缀;如果打印该值,则不会显示该值

>>> from random import randint
>>> print randint(100000000000000000000, 999999999999999999999)
106315199286113607384
>>>

REPL中的输出有一个L后缀;如果打印该值,则不会显示该值

>>> from random import randint
>>> print randint(100000000000000000000, 999999999999999999999)
106315199286113607384
>>>

不要打印值的报告,这样你就没事了。你用这个值做什么?任何超出+/-2**31范围的整数都不适合小整数对象,而且你的数字要大得多。@Schorsch的可能重复:我不确定它是否是dup。显然,这两位提问者也有类似的困惑,但我不确定那里的答案是否有帮助。但是,如果没有别的,它肯定应该出现在链接问题列表中……如果目标是简单地拥有一个30位数的随机数,那么生成两个小数字,然后将它们组合起来是更好的主意吗?不,一个30位数长的随机数,不管你怎么创建它,都会是一个长的,因为你不能在一个整数中容纳30位数。这没有什么错。尝试合并两个较小的数字只会增加复杂性、效率低下,并且容易让bug溜进,没有任何好处。不要打印值的报告,你就没事了。你用这个值做什么
任何超出+/-2**31范围的整数都不适用于小整数对象,并且您的数字要大得多。@Schorsch的可能重复:我不确定它是否为dup。显然,这两位提问者也有类似的困惑,但我不确定那里的答案是否有帮助。但是,如果没有别的,它肯定应该出现在链接问题列表中……如果目标是简单地拥有一个30位数的随机数,那么生成两个小数字,然后将它们组合起来是更好的主意吗?不,一个30位数长的随机数,不管你怎么创建它,都会是一个长的,因为你不能在一个整数中容纳30位数。这没有什么错。尝试合并两个较小的数字只会增加复杂性、效率低下,并且容易让bug溜进,但没有任何好处。