【问题标题】:Length of giant list-like objects in pythonpython中巨型列表对象的长度
【发布时间】:2021-04-15 16:09:40
【问题描述】:

我正在创建一个包含大量元素的类似列表的对象,但是当我运行以下代码时,出现错误。

class test:
    def __init__(self, n):
        self.n = n
        
    def __len__(self):
        return self.n
    
instance = test(10**20)
print(len(instance))

我得到的错误是: 溢出错误:无法将“int”放入索引大小的整数中

有人知道怎么回事吗?

【问题讨论】:

  • 请使用完整的错误回溯更新您的问题。
  • python -c "import platform; print(platform.architecture())" 显示什么?
  • @juanpa.arrivillaga 它显示:('64bit', 'WindowsPE')
  • 这能回答你的问题吗? __len__ can't return big numbers
  • 好的,谢谢 Miyaki 先生

标签: python python-3.x math instance-variables largenumber


【解决方案1】:

这是一个 CPython 实现细节。来自__len__ docs

在 CPython 中,要求长度最多为sys.maxsize。如果 长度大于sys.maxsize某些特征(如len()) 可以提高OverflowError。为了防止事实引发 OverflowError 值测试,对象必须定义__bool__() 方法。

【讨论】:

  • 啊,好吧,很奇怪。无论如何,我通过将 __len__() 函数重命名为 length() 并改用它来解决问题。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-10
  • 2012-06-29
相关资源
最近更新 更多