【问题标题】:How can I set a length (for example "short" or "long") to a int variable?如何将长度(例如“short”或“long”)设置为 int 变量?
【发布时间】:2018-02-06 22:30:25
【问题描述】:

我想知道是否可以在 python 中为变量设置长度,例如在 C 中:shortlong 等。

【问题讨论】:

  • 不,ints(至少在 python3.x 上)是大整数。它们可以保存任何整数。如果你想要类似 C 的类型,你需要去像 NumPy 这样已经包装了它们的库。
  • 另外,还有ctypes module,主要是为了与原生库互操作,顾名思义,提供C兼容的类型。

标签: python variables integer


【解决方案1】:

您不能直接指定精度。当 python int 变得太大时,它们将自动转换为 python long。您可以通过附加“l”或“L”来初始化python long。但是请注意,这仅在 python 2 中才有可能。

例如:

long_int = 398593849843l

another = 13L

【讨论】:

    【解决方案2】:

    我建议看一下 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)
    

    【讨论】:

      【解决方案3】:

      正如我在 cmets Pythons 中已经提到的,整数是大整数。它们可以保存您希望的任何整数:

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

      在 Python 中也很少需要较短的类型,因为(至少 CPython)使用引用计数系统,这意味着所有实例(我的意思是 all)都有一个引用计数(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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-12-12
        • 2010-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-03
        相关资源
        最近更新 更多