Python L suffix - indicated long integer literals before Python3

My question is why do a MySQL row's integer values have an 'L' suffix? Here are the details:

The following dictionary -- artificially formatted here for ease of display --

{'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'}

is comprised of a MySQL database table's columns zipped with the result of reading once from the table.

I can remove the 'L' by passing these values into int(), so if that dictionary were in a variable named snapped_read, I could do this:

int(snapped_read['reading']) and 3018L would change to 3018.

I'm just curious as to why integers show up this way.

share improve this question
 

3 Answers

up vote 20 down vote accepted

Because in versions of Python before Python 3, long integer literals were indicated with an l or L suffix. In Python 3, ints and longs have been merged into just int, which functions pretty much like long used to.

Do note that, technically, Python( 2)'s int was equivalent to C's long, while Python's long was more like a BigNumber-type thing with unlimited precision (which is now the case for Python 3's int type.)

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

share improve this answer
 
3 
Side note: MySQLdb convert ALL integer types to long type on Python 2.x –  Paulo Freitas  Aug 1 '12 at 18:09
1 
Interesting to know. It looks like only BIGINT would require that, though, so I'm guessing it's for consistency in terms of the Python interface. dev.mysql.com/doc/refman/5.6/en/integer-types.html –  JAB  Aug 1 '12 at 18:10 
 
Yeah, don't know why, but even TINYINT columns got converted to long type... Needs further investigation, but I also think it's due to the Python's database interface API. –  Paulo Freitas  Aug 1 '12 at 18:15 

L is for the long data type.

For example,

age = 24 # int
bankBalance = 20000005L # long
share improve this answer
 
1 
Just beat me! :) –  Rob Wagner  Aug 1 '12 at 17:51
3 
You need a long to contain your bank balance? Shouldn't you be sipping lemonade by a pool somwhere? What are you doing answering questions on SO? (+1) -- although you might want to change your comments from // to #. –  mgilson  Aug 1 '12 at 17:53 
 
Sorry @mgilson I am a PHP guy :) –  Kalpesh  Aug 1 '12 at 17:58
1 
In Python you code just age = 24 and bankBalance = 20000005L, no type definitions neither semicolons to end statements. :) –  Paulo Freitas  Aug 1 '12 at 18:06
 
I wish I needed a long to keep my bank balance!! :D –  BorrajaX  Aug 14 '12 at 16:08

Because they're not exactly integers, they are 'longs'.

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

They usually don't offer too much trouble, though

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

Other stackoverflow question about this: here

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值