Встроенные инструменты обращения по следовательностей Python

vstroennye instrumenty obrashheniya po sledovatelnostej python Структуры данных

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

>>> L = [2, 4, 1, 3, 5]

>>> L.reverse()

>>> L

[5, 3, 1, 4, 2]

>>> L = [2, 4, 1, 3, 5]

>>> list(reversed(L))

[5, 3, 1, 4, 2]

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

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

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

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

Дополнительные структуры данных вы также найдете в относительно новом модуле collections, входящем в стандартную библиотеку Python. Как упоминалось в предыдущей главе, этот модуль реализует именованные кортежи, упорядоченные словари и многое другое. Он описан в руководстве по стандартной библиотеке Python, но исходный программный код этого модуля, как и многих других модулей в стандартной библиотеке, может также служить источником дополнительных примеров.

Использованная литература:

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий