48

我的问题是为什么 MySQL 行的整数值有一个“L”后缀?以下是详细信息:

下面的字典——为了便于展示,这里人工格式化——

{'estimated': '', 
 'suffix': '', 
 'typeofread': 'g', 
  'acct_no': 901001000L, 
  'counter': 0, 
  'time_billed': datetime.datetime(2012, 5, 1, 9, 5, 33), 
  'date_read': datetime.datetime(2012, 3, 13, 23, 19, 45), 
  'reading': 3018L, 
  'meter_num': '26174200'}

由 MySQL 数据库表的列组成,该列压缩了从表中读取一次的结果。

我可以通过将这些值传递给 int() 来删除“L”,因此如果该字典位于名为 snapped_read 的变量中,我可以这样做:

int(snapped_read['reading'])并将3018L更改为3018.

我只是好奇为什么整数会以这种方式出现。

4

3 回答 3

49

因为在 Python 3 之前的 Python 版本中,长整型字面量用lorL后缀表示。在 Python 3 中,ints 和longs 已合并为 just int,其功能与以前非常相似long

请注意,从技术上讲,Python(2)'sint等同于 C's long,而 Python'slong更像是BigNumber具有无限精度的 -type 事物(现在是 Python 3 的int类型的情况。)

http://docs.python.org/library/stdtypes.html#numeric-types-int-float-long-complex

于 2012-08-01T17:51:30.870 回答
13

L用于long数据类型。

例如,

age = 24 # int
bankBalance = 20000005L # long
于 2012-08-01T17:50:34.500 回答
8

因为它们不完全是整数,所以它们是“长整数”。

http://docs.python.org/library/stdtypes.html#typesnumeric

不过,它们通常不会带来太多麻烦

>>> a=1
>>> b=long(1)
>>> a
1
>>> b
1L
>>> a==b
True

关于这个的其他stackoverflow问题:这里

于 2012-08-01T17:51:53.147 回答