Код: Выделить всё
len_class.pyКод: Выделить всё
class BigLen():
def __len__(self):
return 10**100
Код: Выделить всё
>>> from len_class import BigLen
>>> len(BigLen())
Traceback (most recent call last):
File "", line 1, in
OverflowError: cannot fit 'int' into an index-sized integer
Чтобы внести большую ясность в мой вариант использования и обосновать этот вопрос. Это для реализации ленивой последовательности. Возьмем, к примеру, набор четных чисел от 0 до 10*100-1. Мы можем установить функциональную связь между индексами; 0, 1, 2, 3, ..., 10**100-1 и соответствующие четы; 0, 2, 4, 6, ..., 2*(10**100-1). Если i является индексом, то функция f(i)=2*i устанавливает связь. Это можно использовать для реализации ленивой последовательности, когда в памяти почти ничего не хранится, но любой элемент доступен. Если e является объектом Evens, то len(e) == 10*100 , len(e[1:]) == 10**100-1 , len(e[:2]) == 2 и т. д. И e[3] == 6 , e[10] == 20, e[10**100-1] == 2*(10 **100-1) и т. д. Среди других свойств, но без дополнительных подробностей, поскольку это отводит в сторону основную суть.
Есть ли обходной путь для этой проблемы? Можно ли привести это целое число индексного размера к произвольному размеру python int?
Сам проект, по сути, представляет собой реализацию ленивой последовательности, поэтому нет намерения хранить много данных в памяти. Лучше всего использовать __len__. Я использую Python 3.12.3.
Подробнее здесь: https://stackoverflow.com/questions/798 ... ex-sized-i
Мобильная версия