Я хотел бы знать, возможно ли установить длину для переменной в python, как в C: short, long и т. Д.

2
Faggiano 29 Авг 2017 в 15:46

3 ответа

Лучший ответ

Как я уже упоминал в комментариях, целые числа Pythons являются большими целыми числами. Они могут содержать любое желаемое целое число:

>>> a = 1234567890 ** 100
... very long number ...

В Python также редко требуется более короткие типы, потому что (по крайней мере, CPython) использует систему подсчета ссылок, а это означает, что все экземпляры (и я имею в виду все ) имеют refcount (64-битный) и указатель на атрибут класса (еще 64-битный). С дополнительными 128 битами редко полезно использовать целые числа короче 32 или 64 бит.

Если вы действительно хотите эти C-типы, вы можете использовать NumPy, который уже обернул их:

>>> import numpy as np
>>> np.short(10)
10
>>> type(np.short(10))
numpy.int16

Но накладные расходы памяти для скаляров, как сказано выше, не стоят того. Однако, если у вас есть массивы, этот аргумент больше не выполняется:

>>> import sys
>>> sys.getsizeof(np.short(10))
26   # bytes

>>> arr = np.array([1,2,3,4,5,6,7,8,9,10], dtype=np.short)
>>> arr
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10], dtype=int16)
>>> sys.getsizeof(arr)
116  # bytes

Это связано с тем, что NumPy также оборачивает C-массивы и имеет только накладные расходы на счетчик ссылок + накладные расходы на класс (+ дополнительные накладные расходы) (= 96 байт) один раз на массив:

>>> sys.getsizeof(np.zeros(1000000, dtype=np.short))
2000096
0
MSeifert 29 Авг 2017 в 13:17

Я предлагаю взглянуть на dtype от Numpy, некоторую документацию можно найти

Thomas Berlok 29 Авг 2017 в 12:55

Вы не можете указать точность напрямую. Когда питон int становится слишком большим, он автоматически преобразуется в длину питона. Вы можете инициализировать Python long, добавив 'l' или 'L'. Обратите внимание, что это возможно только в Python 2.

Например:

long_int = 398593849843l

another = 13L

0
Mark Beilfuss 29 Авг 2017 в 12:57