«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Можете ли вы заморозить словарь в Python?

Можете ли вы заморозить словарь в Python?

Опубликовано 3 ноября 2024 г.
Просматривать:618

 Can You Freeze a Dictionary in Python?

Возможен ли «замороженный словарь» в Python?

Концепция «замороженного словаря» была темой обсуждения в Сообщество Python. Хотя Python не предоставляет встроенного замороженного словаря, появилось несколько решений, позволяющих удовлетворить потребность в неизменяемом хешируемом словаре.

Одной из распространенных причин использования замороженного словаря является запоминание вызовов функций с неизвестными аргументами. Типичный подход включает преобразование аргументов в кортеж с помощью tuple(sorted(kwargs.items())), полагаясь на стабильность сортировки при поиске в хэш-таблице.

Для более комплексного подхода рассмотрите следующий класс FrozenDict:

import collections

class FrozenDict(collections.Mapping):
    ...

Этот класс предоставляет методы для итерации, определения длины, извлечения элементов и вычисления хэша, гарантируя, что он ведет себя как стандартный словарь и поддерживает хеширование.

На практике FrozenDict работает эффективно :

x = FrozenDict(a=1, b=2)
y = FrozenDict(a=1, b=2)
print(x is y, x == y, x == {'a': 1, 'b': 2})
d = {x: 'foo'}
print(d[y])  # 'foo'

Предлагая собственную реализацию, FrozenDict позволяет создавать неизменяемые, хэшируемые словари в Python, расширяя возможности обработки объектов и оптимизации памяти.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3