Как использовать объекты Frozenset в Python?

проекты Python Программирование и разработка

В этой статье будет рассмотрено руководство по использованию функции «frozenset» в Python, которая возвращает новый объект Python типа frozenset. Эти объекты похожи на объекты набора, доступные в Python, с некоторыми ключевыми отличиями. Все примеры кода в этой статье протестированы с Python 3.9.5 в Ubuntu 21.04.

О Frozensets

Функция frozenset принимает один аргумент объекта Python итеративного типа и возвращает новый объект Python типа frozenset. Объект типа frozenset — это хешируемый и неизменяемый объект Python, элементы которого заморожены или неизменны на протяжении всего времени их существования. В отличие от объекта Python типа набора, элементы которого могут быть изменены в любое время, все элементы в замороженном наборе остаются постоянными. Использование фрозенсетов можно лучше понять на примерах. Некоторые из них описаны ниже.

Создание нового объекта Frozenset

Чтобы получить новый объект типа frozenset, просто укажите любой итеративный тип в качестве необязательного аргумента функции frozenset. Вот пример кода:

= [1, 2, 3, 4]

fset = frozenset(l)

print (fset)

print (type(fset))

Первый оператор в коде определяет новый список, который называется просто «l». Затем создается новый объект frozenset путем вызова функции frozenset и передачи списка в качестве аргумента. После выполнения приведенного выше примера кода вы должны получить следующий результат:

frozenset({1, 2, 3, 4})

<class ‘frozenset’>

Как видно из выходных данных, fset является объектом типа frozenset и использует синтаксис фигурных скобок, используемый наборами также в Python. Frozensets содержат только уникальные элементы, поскольку дублирование недопустимо, что опять же очень похоже на объекты типа набора Python. Каждый объект типа frozenset является набором Python, но наоборот, неверно, поскольку элементы набора можно изменить, вызвав некоторые методы. Обратите внимание, что вы можете создать пустой фризенсет, вызвав функцию фризенсета без каких-либо аргументов.

Вы не можете изменить созданный Frozenset

Как указывалось ранее, объект типа Frozenset имеет элементы, которые не меняются в течение своего срока службы. Хотя вы можете использовать методы, доступные для наборов Python с объектами типа frozenset, выдается ошибка, если вы пытаетесь использовать метод, изменяющий сам исходный объект frozenset. Вот пример:

= [1, 2, 3, 4]

new_set = set(l)

new_set.remove(1)

print (new_set)

fset = frozenset(l)

fset.remove(1)

В приведенном выше примере кода есть два оператора, в которых вызывается метод » remove » для объектов типа набора. Когда элемент успешно удален из » new_set «, при вызове метода remove для » fset » выдается ошибка. После выполнения приведенного выше примера кода вы должны получить следующий результат:

{2, 3, 4}

Traceback (most recent call last):

File «main.py», line 9, in <module>

fset.remove(1)

AttributeError‘frozenset’ object has no attribute ‘remove’

Другие подобные методы, такие как add, pop, clear, discard и т. Д., Не будут работать с forzensets.

Методы, которые работают с Frozensets

Все методы набора Python, которые не изменяют элементы набора, работают с объектами типа frozenset. Таким образом, вы можете сравнить два набора Frozense на предмет равенства или неравенства, выполнить итерацию / цикл по ним, получить общие или уникальные элементы между двумя наборами Frozense и т. Д. Ниже приведен пример, показывающий некоторые методы, которые работают с Frozensets.

fset1 = frozenset([1, 2, 3, 4])

fset2 = frozenset([3, 4, 5, 6])

print (fset1.intersection(fset2))

print (fset1.union(fset2))

print (fset1.difference(fset2))

print (len(fset1))

print (len(fset2))

Код не требует пояснений. Были вызваны некоторые методы, не меняющие значений исходных фрозенсетов. Эти методы в основном использовались для сравнения элементов двух разных фрезеров. После выполнения приведенного выше примера кода вы должны получить следующий результат:

frozenset({3, 4})

frozenset({1, 2, 3, 4, 5, 6})

frozenset({1, 2})

4

4

Вот некоторые из других методов, которые работают с замороженными наборами: «issubset», «issueperset», «symric_difference», «copy» и т. Д. Операторы равенства, такие как «>», «<„, “> =» и «<=», также работают с объектами типа Frozenset.

Frozensets можно преобразовать в другие итерируемые типы

Вы можете преобразовать объекты типа frozenset в другие итерации, вызвав их главный конструктор. В приведенном ниже примере кода показано преобразование объектов типа frozenset в объекты типа списка, кортежа и набора.

fset = frozenset([1, 2, 3, 4])

print (list(fset))

print (tuple(fset))

print (set(fset))

После выполнения приведенного выше примера кода вы должны получить следующий результат:

[1, 2, 3, 4]

(1, 2, 3, 4)

{1, 2, 3, 4}

Примеры использования Frozenset

Поскольку объекты frozenset представляют собой не что иное, как неизменяемые / неизменяемые объекты Python типа набора, вы можете задаться вопросом об их полезности, поскольку наборы всегда можно использовать вместо них. Наиболее очевидный вариант использования frozensets — это объявление объектов типа набора с уникальными элементами без риска их случайного изменения позже в коде. Объекты типа Frozenset можно использовать в качестве ключей словаря, в то время как наборы нельзя использовать для той же цели. Поскольку Frozensets являются хешируемыми, их можно использовать в наборах, в то время как наборы не могут быть вставлены в другой набор. Взгляните на код ниже:

fset = frozenset({4, 5})

= {1, 2, fset}

print (s)

= {1, 2, {4, 5}}

Во втором утверждении фрозенсет был добавлен в набор во время создания. В последнем утверждении объект типа набора используется внутри другого набора. После выполнения приведенного выше примера кода вы должны получить следующий результат:

{frozenset({4, 5}), 1, 2}

Traceback (most recent call last):

File «main.py», line 27, in <module>

= {1, 2, {4, 5}}

TypeError: unhashable type‘set’

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

Заключение

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

Читайте также:  Как создать полиморфных компонентов в TypeScript?
Оцените статью
bestprogrammer.ru
Добавить комментарий