J'aimerais savoir s'il est possible de définir une longueur pour une variable en python comme en C : short
, long
etc.
Réponses
Trop de publicités?Je vous suggère de jeter un coup d'œil au dtype de Numpy, vous trouverez de la documentation à ce sujet. aquí .
Quelques exemples :
import numpy as np
a = np.dtype(np.int32)
a = np.dtype(np.int64)
a = np.dtype(np.float32)
a = np.dtype(np.float64)
a = np.dtype(np.float128)
Vous ne pouvez pas spécifier une précision directement. Lorsqu'un programme python int
devient trop grand, il sera automatiquement converti en un long python. Vous pouvez initialiser un python long en ajoutant un 'l' ou un 'L'. Notez toutefois que cela n'est possible que dans python 2.
Par exemple :
long_int = 398593849843l
another = 13L
Comme je l'ai déjà mentionné dans les commentaires, les entiers de Python sont de grands entiers. Ils peuvent contenir tous les nombres entiers que vous souhaitez :
>>> a = 1234567890 ** 100
... very long number ...
En Python, il est également rarement nécessaire d'utiliser des types plus courts car (au moins CPython) utilise un système de comptage de références et cela signifie que toutes les instances (et je veux dire todos ) ont un attribut refcount (64bit) et un pointeur vers la classe (un autre 64bit). Avec un overhead de 128 bits, il est rarement utile d'utiliser des entiers plus courts que 32 ou 64 bits.
Si vous voulez vraiment ces types C, vous pouvez utiliser NumPy, qui les intègre déjà :
>>> import numpy as np
>>> np.short(10)
10
>>> type(np.short(10))
numpy.int16
Mais la surcharge de mémoire pour les scalaires n'en vaut pas la peine, comme dit plus haut. Cependant, si vous avez des tableaux, cet argument ne tient plus :
>>> 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
C'est parce que NumPy enveloppe également les tableaux C et n'a l'overhead du nombre de références + l'overhead de la classe (+ l'overhead supplémentaire) (=96 octets) qu'une fois par tableau :
>>> sys.getsizeof(np.zeros(1000000, dtype=np.short))
2000096