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



Download 6,94 Mb.
Pdf ko'rish
bet54/80
Sana24.02.2022
Hajmi6,94 Mb.
#212875
1   ...   50   51   52   53   54   55   56   57   ...   80
Bog'liq
978544610803 Chisty Python Tonko


разделе вы кратко рассмотрите каждую реализацию и ее уникальные ха-


5 .3 . Записи, структуры и объекты переноса данных 171
рактеристики. В конце раздела вы найдете резюме и руководство для при-
нятия решений, которое поможет вам сделать свой собственный выбор.
Ладно, давайте начнем!
dict — простые объекты данных
Словари Python хранят произвольное количество объектов, при этом 
каждый идентифицируется уникальным ключом
1
. Словари также нередко 
называются ассоциативными массивами или таблицами соответствий 
и позволяют производить эффективный поиск, вставку и удаление любого 
объекта, связанного с заданным ключом.
В Python использование словарей в качестве типа данных запись или 
объекта данных вполне возможно. Словари в Python легко создаются, 
поскольку они имеют свой собственный синтаксический сахар, который 
встроен в язык в форме литералов словаря. Синтаксис словаря краток 
и довольно удобен для набора на клавиатуре.
Объекты данных, создаваемые с использованием словарей, могут изме-
няться, и при этом практически отсутствует защита от опечаток в именах 
полей, поскольку поля могут свободно добавляться и удаляться в любое 
время. Оба этих свойства способны добавить поразительные ошибки, 
и всегда существует компромисс между удобством и устойчивостью 
к ошибкам, которого нужно достигать.
car1 = {
'цвет': 'красный',
'пробег': 3812.4,
'автомат': True,

car2 = {
'цвет': 'синий',
'пробег': 40231,
'автомат': False, 

# Словари имеют хороший метод repr: 
1
См. раздел «Словари, ассоциативные массивы и хеш-таблицы» настоящей главы.


172 Глава 5 • Общие структуры данных Python
>>> car2 
{'цвет': 'синий', 'автомат': False, 'пробег': 40231} 
# Получить пробег: 
>>> car2['пробег'] 
40231 
# Словари изменяемы: 
>>> car2['пробег'] = 12 
>>> car2['лобовое стекло'] = 'треснутое' 
>>> car2 
{'лобовое стекло': 'треснутое', 'цвет': 'синий',
'автомат': False, 'пробег': 12} 
# Отсутствует защита от неправильных имен полей
# или отсутствующих/лишних полей: 
car3 = {
'цвет': 'зеленый',
'автомат': False,
'лобовое стекло': 'треснутое', 
}
tuple — неизменяемые группы объектов
Кортежи в Python представляют собой простые структуры данных, пред-
назначенные для группирования произвольных объектов
1
. Кортежи не-
изменяемы — после их создания их нельзя исправить.
С точки зрения производительности кортежи занимают чуть меньше 
оперативной памяти, чем списки в Python
2
, и к тому же быстрее созда-
ются.
Как вы видите в приведенном ниже результате дизассемблирования 
байткода, конструирование кортежной константы занимает всего один 
код операции 
LOAD_CONST
, в то время как конструирование объекта-списка 
с одинаковым содержимым требует еще нескольких операций:
1
См. документацию Python «tuple»: 
https://docs .python .org/3/tutorial/datastructures .
html#tuples-and-sequences
2
См. CPython: «tupleobject.c» (
https://github .com/python/cpython/blob/master/Objects/
tupleobject .c
) и «listobject.c» (
https://github .com/python/cpython/blob/master/Objects/listobject .c
)


5 .3 . Записи, структуры и объекты переноса данных 173
>>> import dis 
>>> dis.dis(compile("(23, 'a', 'b', 'c')", '', 'eval'))
0 LOAD_CONST 4 ((23, 'a', 'b', 'c'))
3 RETURN_VALUE 
>>> dis.dis(compile("[23, 'a', 'b', 'c']", '', 'eval'))
0 LOAD_CONST 0 (23)
3 LOAD_CONS 1 ('a')
6 LOAD_CONS 2 ('b')
9 LOAD_CONST 3 ('c')
12 BUILD_LIS 4
15 RETURN_VALUE
Однако вам не стоит особенно налегать на эти различия. На практике 
разница в производительности часто будет незначительной, и попытка 
выжать из программы больше эффективности, переключаясь со списков 
на кортежи, вероятно, будет нерациональной.
Возможным недостатком простых кортежей является то, что данные, 
которые вы в них храните, извлекаются только путем доступа к корте-
жу через целочисленные индексы. У вас не получится назначить имена 
отдельным хранящимся в кортеже свойствам. А это может сказаться на 
удобочитаемости исходного кода.
Кроме того, кортеж всегда является ситуативной структурой: трудно 
гарантировать, что у двух кортежей будет одинаковое количество полей 
и одинаковые хранящиеся в них свойства.
А это — раздолье для ошибок «по недоразумению», например для раз-
ночтений порядка следования полей. Поэтому я рекомендую держать 
минимальное количество полей в кортеже.

Download 6,94 Mb.

Do'stlaringiz bilan baham:
1   ...   50   51   52   53   54   55   56   57   ...   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