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



Download 6,94 Mb.
Pdf ko'rish
bet43/80
Sana24.02.2022
Hajmi6,94 Mb.
#212875
1   ...   39   40   41   42   43   44   45   46   ...   80
Bog'liq
978544610803 Chisty Python Tonko

нованными кортежами (named tuples). Доступ к каждому хранящемуся 
в них объекту можно получить через уникальный (человекочитаемый) 
идентификатор. Это свойство освобождает вас от необходимости запоми-
нать целочисленные индексы или обращаться к искусственным приемам, 
таким как определение целочисленных констант в качестве мнемокодов 
ваших индексов.
Вот пример того, как выглядит именованный кортеж:
>>> from collections import namedtuple 
>>> Car = namedtuple('Авто' , 'цвет пробег') 
Именованные кортежи были добавлены в стандартную библиотеку 
Python версии 2.6. Чтобы ими воспользоваться, необходимо импорти-
ровать модуль 
collections
. В приведенном выше примере я определил 
простой тип данных 
Car
с двумя полями: 
цвет
и 
пробег
.
Вам, возможно, любопытно, почему в этом примере я передаю фабрич-
ной функции 
namedtuple
строковое значение 
'Авто'
в качестве первого 
аргумента.
В документации Python этот параметр упоминается как «имя типа». Он 
является именем нового класса, который создается в результате вызова 
функции 
namedtuple
.
Поскольку функция 
namedtuple
не может знать о том, каким является имя 
переменной, которой мы назначаем результирующий класс, мы должны 
сообщить ему явным образом, какое имя класса мы хотим использовать. 


4 .6 . Чем полезны именованные кортежи 131
Имя класса используется в строке документации docstring и в реализа-
ции метода 
__repr__
, которые функция 
namedtuple
генерирует для нас 
автоматически.
В этом примере есть и другая синтаксическая диковинка — почему мы 
передаем поля в виде строки, в которой их имена закодированы как 
'цвет
пробег'
?
Ответ заключается в том, что фабричная функция 
namedtuple
вызывает 
функцию 
split()
со строковым значением, содержащим имена полей, 
которая преобразовывает его в список имен полей. Так что в действитель-
ности это просто сокращенная запись для приведенных ниже двух шагов:
>>> 'цвет пробег'.split() 
['цвет', 'пробег'] 
>>> Car = namedtuple('Авто', ['цвет', 'пробег']) 
Разумеется, вы также можете непосредственно передать список со стро-
ковыми именами полей, если вы предпочитаете, чтобы это выглядело 
именно так. Преимущество от использования списка как такового состоит 
в том, что этот код легче переформатировать, если есть необходимость 
разбить его на несколько строк кода:
>>> Car = namedtuple('Авто', [ 
... 'цвет', 
... 'пробег', 
... ])
Что бы вы ни решили, теперь при помощи фабричной функции 
Car
вы 
можете создавать новые объекты «car». Поведение будет таким же, как 
если бы вы создали класс 
Car
вручную и определили в нем конструктор, 
принимающий значения «цвет» и «пробег»:
>>> my_car = Car('красный', 3812.4) 
>>> my_car.цвет 
'красный' 
>>> my_car.пробег 
3812.4
Помимо получения доступа к значениям, хранящимся в именованном 
кортеже, по их идентификаторам, вы по-прежнему можете получать к ним 


132 Глава 4 • Классы и ООП
доступ по их индексу. Благодаря этому именованные кортежи могут ис-
пользоваться в качестве прямой замены обычным кортежам:
>>> my_car[0] 
'red' 
>>> tuple(my_car) 
('красный', 3812.4) 
Распаковка кортежа и оператор 
*
для распаковки аргументов функции 
по-прежнему работают как надо:
>>> color, mileage = my_car 
>>> print(color, mileage) 
красный 3812.4 
>>> print(*my_car) 
красный 3812.4
К тому же в качестве бесплатного приложения вы получите приличное 
строковое представление своего объекта 
namedtuple
, что позволит наби-
рать чуть меньше текста и сэкономит на многословности:
>>> my_car 
Авто(цвет='красный' , пробег=3812.4)
Подобно кортежам, именованные кортежи не изменяются. Когда вы 
попытаетесь переписать одно из их полей, вы получите исключение 
AttributeError
:
>>> my_car.цвет = 'синий' 

Download 6,94 Mb.

Do'stlaringiz bilan baham:
1   ...   39   40   41   42   43   44   45   46   ...   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