Б41 Чистый Python. Тонкости программирования для профи. Спб.: Питер



Download 6,94 Mb.
Pdf ko'rish
bet57/80
Sana24.02.2022
Hajmi6,94 Mb.
#212875
1   ...   53   54   55   56   57   58   59   60   ...   80
Bog'liq
978544610803 Chisty Python Tonko

У вас есть всего несколько (2
3) полей: использование обыкновенного 
объекта-кортежа может подойти, если порядок следования полей легко 
запоминается или имена полей излишни. Например, представьте точку 
(x,
y,
z)
в трехмерном пространстве.
Вам нужны неизменяемые поля: в данном случае обыкновенные кортежи, 
collections.namedtuple
и 
typing.NamedTuple
, дадут неплохие возмож-
ности для реализации этого типа объекта данных.
Вам нужно устранить имена полей, чтобы избежать опечаток: вашими 
друзьями здесь будут 
collections.namedtuple
и 
typing.NamedTuple
.
Вы не хотите усложнять: обыкновенный объект-словарь может быть 
хорошим вариантом из-за удобного синтаксиса, который сильно напо-
минает 
JSON
.
Вам нужен полный контроль над вашей структурой данных: самое время 
написать собственный класс с методами-модификаторами (сеттерами) 
и методами-получателями (геттерами) 
@property
.


5 .4 . Множества и мультимножества 181
Вам нужно добавить в объект поведение (методы): вам следует на-
писать собственный класс с нуля либо путем расширения 
collections.
namedtuple
или 
typing.NamedTuple
.
Вам нужно плотно упаковать данные, чтобы сериализовать их для 
запи си на жесткий диск или отправить их по Сети: самое время навести 
справки по поводу 
struct.Struct
, потому что этот объект представляет 
собой превосходный вариант использования.
Если вы ищете безопасный вариант, который можно использовать по 
умолчанию, то моя общая рекомендация в отношении реализации про-
стой записи, структуры или объекта данных в Python будет следующей: 
использовать 
collections.namedtuple
в Python 2.x и его младшего брата, 
typing.NamedTuple
, в Python 3.
5 .4 . Множества и мультимножества
В этом разделе вы увидите, как в Python реализуются такие структуры 
данных, как изменяемое и неизменяемое множество и мультимножество 
(или тип 
bag
, то есть мешок), с использованием встроенных типов данных 
и классов стандартной библиотеки. Однако сначала давайте составим 
краткое резюме по поводу того, что такое множество.
Множество представляет собой неупорядоченную коллекцию объектов, 
которая не допускает повторяющихся элементов. Как правило, множе-
ства используются для быстрой проверки принадлежности значения 
множеству, вставки новых значений в множество, удаления значений из 
множества и вычисления на множествах операций, таких как объединение 
или пересечение двух множеств.
Предполагается, что в «надлежащей» реализации множества операции 
проверки на принадлежность будут выполняться за быстрое O(1) время. 
Операции объединения, пересечения, разности и взятия подмножеств 
должны в среднем занимать O(n) времени. В реализациях множества, 
включенных в стандартную библиотеку Python, данные характеристики 
производительности соблюдаются
1
.
1
См. 
https://wiki .python .org/moin/TimeComplexity


182 Глава 5 • Общие структуры данных Python
Точно так же, как и словари, множества в Python обрабатываются особым 
образом и имеют свой синтаксический сахар, упрощающий их создание. 
Например, синтаксис выражения с фигурными скобками для множеств 
и конструкция включения в множество позволяют удобно определять 
новые экземпляры множеств:
vowels = {'a', 'e', 'i', 'o', 'u'} 
squares = {x * x for x in range(10)}
Тем не менее следует быть осторожными: для того чтобы создать пу-
стое множество, вам нужно вызвать конструктор 
set()
. Использование 
фигурных скобок 
{}
неоднозначно и вместо этого создаст пустой сло-
варь.
Python и его стандартная библиотека предоставляют несколько реализа-
ций множества. Давайте их рассмотрим.
set — ваше дежурное множество
Это встроенная в Python реализация множества
1
. Тип 
set
изменяемый 
и допускает динамическую вставку и удаление элементов.
Множества Python 
set
подкрепляются типом данных 
dict
и обладают 
одинаковыми характеристиками производительности. Любой хешируе-
мый объект может храниться в множестве 
set
2
.
>>> vowels = {'а', 'о', 'э', 'и', 'у', 'ы', 'е', 'е', 'ю', 'я'} 
>>> 'э' in vowels 
True 
>>> letters = set('алиса') 
>>> letters.intersection(vowels) 
{'а', 'и'} 
>>> vowels.add('х') 
1
См. документацию Python «set»: 
https://docs .python .org/3/tutorial/datastructures .html#sets
2
См. документацию Python «hashable»: 
https://docs .python .org/3/glossary .html


5 .4 . Множества и мультимножества 183
>>> vowels 
{'х', 'о', 'э', 'у', 'и', 'ы', 'е', 'е', 'ю', 'а', 'я'} 
>>> len(vowels) 
6
frozenset — неизменяемые множества
Класс 
frozenset
реализует неизменяемую версию множества 
set
. Такое 
множество не может быть изменено после того, как оно было сконстру-
ировано
1
. Множества 
frozenset
статичны и допускают только операции 
с запросами в отношении своих элементов (никаких вставок или удале-
ний). Поскольку множества 
frozenset
статичны и хешируемы, они могут 
использоваться в качестве ключей словаря или в качестве элементов 
другого множества, а это то, что невозможно с обычными (изменяемыми) 
объектами-множествами 
set
.
>>> vowels = frozenset({'а', 'о', 'э', 'и', 'у', 'ы', 'е', 'е', 'ю',
'я'}) >>> vowels.add('р') 

Download 6,94 Mb.

Do'stlaringiz bilan baham:
1   ...   53   54   55   56   57   58   59   60   ...   80




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish