python : Do not include "L" at the end of the outcome for : randint(100000000000000000000, 999999999999999999999)

标签 python python-2.7

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

 from random import randint
 randint(100000000000000000000, 999999999999999999999)

输出是:

922106555361958347898L

但我不想要那个L..

如果末尾没有“L”,我只能将其用作 int。

更新

如果目标只是获得一个 30 位长的随机数,那么生成两个小数然后将它们组合是否更好?

最佳答案

L 的原因这是因为这太大而不适合 int ,* 所以它是一个 long .参见 Numeric Types — int , long , float , complex 在文档中获取更多详细信息。


那么,为什么你会得到 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)

例如,如果您想将字符串保存在变量中或将其写入文件,您必须调用 str明确地。

但是如果你只是想把它当作一个数字来使用,你根本不用担心这个;这是一个数字,intlong值可以自由混合(从 Python 2.3 开始)。

如果您试图将它存储在 MySQL 数据库中,无论您使用哪个 MySQL 接口(interface)都不会关心您是否给它 int值或 long ,只要它们适合列类型。**


或者您可以升级到 Python 3.x,其中没有单独的 long再输入(所有整数都是 int ,不管有多大)并且没有 L后缀。


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

** 请注意,您的值太大而无法放入 MySQL BIGINT ,因此您将使用 DECIMAL or NUMERIC .根据您使用的界面以及设置方式,您可能需要手动与字符串相互转换。但是你可以用 str 做到这一点和 int函数,而不用担心哪些值适合 int type 和 which don't.)

关于 python : Do not include "L" at the end of the outcome for : randint(100000000000000000000, 999999999999999999999),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25729497/

相关文章:

python - 如何允许用户在没有 super 用户身份的情况下修改其他用户详细信息? ( Django /Python)

python - Discord.py - 消息,只有一个用户可以在服务器中看到

python - pip install bs4 给出 _socketobject 错误

python - Matplotlib - 如何在不使线条透明的情况下使标记面颜色透明

python - 在不更改 sys.path 的情况下控制 python 中的导入顺序

python - 对多个文件运行 Python 单元测试

python - 通过 FTP 下载时无法识别 Zip 文件

python - mysql接口(interface)错误

python - 如何分隔列表python 2.7的每一行?

python - 展平任意深度的字典