Почему целые числа в кортежей строк базы данных имеют суффикс "L"?
Мой вопрос, почему значения целых чисел в строке 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, заархивированных с результатом чтения один раз из таблицы.
Я могу удалить "L", передав эти значения в int(), поэтому, если этот словарь был в переменной с именем snapped_read, я мог бы сделать это:
int(snapped_read['reading'])
и 3018L
изменится на 3018
.
Мне просто интересно, почему целые числа отображаются таким образом.
Ответы
Ответ 1
Поскольку в версиях Python до Python 3 длинные целые литералы были обозначены суффиксом l
или l
. В Python 3, int
и long
были объединены только в int
, который очень похож на long
.
Обратите внимание, что технически Python (2) int
был эквивалентен C long
, тогда как Python long
был больше похож на вещь BigNumber
с неограниченной точностью (что теперь имеет место для Python 3 int
.)
http://docs.python.org/library/stdtypes.html#numeric-types-int-float-long-complex
Ответ 2
L
предназначен для типа данных long
.
Например,
age = 24 # int
bankBalance = 20000005L # long
Ответ 3
Поскольку они не являются целыми, это "longs".
http://docs.python.org/library/stdtypes.html#typesnumeric
Обычно они не предлагают слишком много проблем, хотя
>>> a=1
>>> b=long(1)
>>> a
1
>>> b
1L
>>> a==b
True
Другой вопрос о stackoverflow об этом: здесь