我想知道是否可以在C:short
,long
等中为python中的变量设置长度。
答案 0 :(得分:3)
我建议看看Numpy的dtype,可以找到一些文档here。
一些例子:
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)
答案 1 :(得分:0)
您无法直接指定精度。当python int
变得太大时,它们将自动转换为python long。您可以通过附加“l”或“L”来初始化python。但请注意,这只能在python 2中使用。
例如:
long_int = 398593849843l
another = 13L
答案 2 :(得分:0)
正如我在评论中已经提到的,Pythons整数是大整数。它们可以包含您希望的任何整数:
>>> a = 1234567890 ** 100
... very long number ...
在Python中,也很少需要更短的类型,因为(至少CPython)使用引用计数系统,这意味着所有实例(我的意思是所有)都有一个引用计数(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