Python:结果的末尾不要包含"L":randint(100000000000000000000,999999999999999999999)

use*_*347 1 python python-2.7

到目前为止,这是我发现的:

 from random import randint
 randint(100000000000000000000, 999999999999999999999)
Run Code Online (Sandbox Code Playgroud)

输出是:

922106555361958347898L
Run Code Online (Sandbox Code Playgroud)

但我不希望L那里..

如果在它的末尾没有"L",我只能将它用作int.

UPDATE

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

aba*_*ert 9

之所以有这样的原因,L是因为它太大而无法融入int,所以它是一个long.见数值类型- ,int,,longfloatcomplex在文档获取更多细节.


所以,你为什么这样做,你L怎么摆脱它?

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

  • repr要么返回规范的源代码表示,要么返回类似的东西<__main__.Eggs at 0x10fbd8908>.
  • str 返回一个人性化的表示.

例如,对于字符串,str('abc')abc,虽然repr('abc')'abc'.

而对于多头str(1L)来说1,repr(1L)就是1L.


当您只在交互式提示符下键入表达式时,它会使用repr.但是当你使用print命令时,它会使用str.所以,如果你想看到没有的价值L,只需print它:

print randint(100000000000000000000, 999999999999999999999)
Run Code Online (Sandbox Code Playgroud)

如果您想(例如,将字符串保存在变量中或将其写入文件),则必须str显式调用.

但如果您只是想将它用作数字,那么您根本不必担心这个问题; 它是一个数,intlong的值可以自由地相互混合(如在Python 2.3左右).

如果您尝试将其存储在MySQL数据库中,那么您使用的任何MySQL接口都不关心您是否给它int赋值,或者long只要它们符合列类型.**


或者你可以升级到Python 3.x,那里没有单独的long类型(所有整数都是int,无论多大),没有L后缀.


*确切的截止点没有在任何地方记录,但至少对于CPython来说,它适合long你平台上的C.因此,在大多数64位平台上,最大值为(1 << 63)-1; 在其他64位平台和所有32位平台上,它是(1 << 31)-1.您可以通过打印在自己的平台上看到自己sys.maxint.无论如何,你的数字需要70位,所以除非有人将Python 2.x移植到具有128位C long的平台,否则它将不适合.

**请注意,您的值太大,甚至无法适应MySQL BIGINT,因此您将使用其中任何一个DECIMALNUMERIC.根据您正在使用的界面以及您的设置方式,您可能需要手动转换为字符串和从字符串转换.但你可以用strint函数做到这一点,而不用担心哪些值适合int类型,哪些不适合.)