У меня есть метод, который принимает (среди прочего) словарь в качестве аргумента. Метод анализирует строки, а словарь предоставляет замены для некоторых подстрок, поэтому он не должен быть изменяемым.
Эта функция вызывается довольно часто и на избыточных элементах, поэтому я подумал, что ее кеширование повысит ее эффективность.
Но, как вы уже догадались, поскольку dict
является изменяемым и, следовательно, не поддается хешированию, @functools.lru_cache
не может декорировать мою функцию. Итак, как я могу преодолеть это?
Бонусный балл, если ему нужны только стандартные библиотечные классы и методы. В идеале, если бы в стандартной библиотеке существовал какой-то frozendict
, которого я не видел, это сделало бы мой день.
PS: namedtuple
только в крайнем случае, так как потребуется большой сдвиг синтаксиса.
namedtuple
и добавления доступаx["key"]
? Вероятно, это будет всего несколько строк кода. - person Sven Marnach   schedule 15.06.2011collections.namedtuple
, которая возвращаетtype
, поэтому, если я хочу добавить__getitem__
к именованному кортежу, мне придется делать это динамически, что невозможно, и даже если это действительно некрасиво. Есть ли другой способ сделать это? - person Evpok   schedule 15.06.2011namedtuple()
:class X(namedtuple("Y", "a b c")): ...
. - person Sven Marnach   schedule 15.06.2011