Главная » Просмотр файлов » Марк Лутц - Изучаем Python, Четвертое издание

Марк Лутц - Изучаем Python, Четвертое издание (1184811), страница 78

Файл №1184811 Марк Лутц - Изучаем Python, Четвертое издание (Марк Лутц - Изучаем Python, Четвертое издание) 78 страницаМарк Лутц - Изучаем Python, Четвертое издание (1184811) страница 782020-08-21СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 78)

Операции сравнения в языке Python всегда проверяют все части составных объектов, пока результат нестанет определенным. В действительности, при сравнивании вложенных объектов интерпретатор ����������������������������������������������������Python����������������������������������������������всегда автоматически выполняет обход структуры данных, чтобы применить операции сравнения рекурсивно, слева направои настолько глубоко, насколько это необходимо. Первое найденное различиеопределяет результат сравнения.Например, при сравнении списков автоматически сравниваются все их компоненты:>>> L1>>> L2>>> L1(True,= [1, (‘a’, 3)] # Разные объекты с одинаковыми значениями= [1, (‘a’, 3)]== L2, L1 is L2 # Равны? Это один и тот же объект?False)В данном случае L1 и L2 ссылаются на совершенно разные списки, но с одинаковым содержимым.

Из-за природы ссылок в языке Python (рассматривалисьв главе 6) существует два способа проверки на равенство:•• Оператор == проверяет равенство значений. Интерпретатор выполняетпроверку на равенство, рекурсивно сравнивая все вложенные объекты.•• Оператор is проверяет идентичность объектов. Интерпретатор проверяет,являются ли сравниваемые объекты одним и тем же объектом (то есть расположены ли они по одному и тому же адресу в памяти).В предыдущем примере L1 и L2 прошли проверку == на равенство (они равны,потому что все их компоненты равны), но не прошли проверку is на идентичность (они ссылаются на разные объекты и соответственно, на разные областипамяти). Однако обратите внимание, что происходит при сравнивании двухкоротких строк:>>> S1>>> S2>>> S1(True,= ‘spam’= ‘spam’== S2, S1 is S2True)Здесь у нас так же имеется два различных объекта с одинаковыми значениями:оператор == должен вернуть истину, а оператор is – ложь.

Но так как интерпретатор с целью оптимизации кэширует и повторно использует короткие строки,в действительности в обе переменные, S1 и S2, записывается ссылка на одну туже строку ‘spam’ в памяти, поэтому оператор is проверки идентичности возвращает истину. Чтобы получить нормальное поведение, потребуется использовать более длинные строки:>>> S1>>> S2>>> S1(True,= ‘a longer string’= ‘a longer string’== S2, S1 is S2False)Разумеется, так как строки являются неизменяемыми, использование механизма кэширования объектов не оказывает отрицательного влияния на программный код – строки нельзя изменить непосредственно, независимо от того,Сравнивание, равенство и истина307сколько переменных ссылаются на них. Если результат проверки на идентичность кажется вам обескураживающим, вернитесь к главе 6, чтобы освежитьв памяти концепцию ссылок на объекты.Как правило, оператор == – это именно то, что требуется в большинстве случаевпроверки равенства; оператор is предназначен для особых случаев.

Мы рассмотрим случаи использования этих операторов далее в книге.Операторы отношений к вложенным структурам также применяются рекурсивно:>>> L1 = [1, (‘a’, 3)]>>> L2 = [1, (‘a’, 2)]>>> L1 < L2, L1 == L2, L1 > L2 # Меньше, равно, больше: кортеж результатов(False, False, True)Здесь L1 больше, чем L2, потому что вложенное число 3 больше, чем 2. Результат последней строки в этом примере в действительности представляет собойкортеж из трех объектов – результатов трех выражений (пример кортежа безобъемлющих круглых скобок).В общем случае Python сравнивает типы следующим образом:•• Числа сравниваются по величине.•• Строки сравниваются лексикографически, символ за символом (“abc” <“ac”).•• При сравнении списков и кортежей сравниваются все компоненты слева направо.•• Словари сравниваются как отсортированные списки (ключ, значение).

Словари в ��������������������������������������������������������������Python�������������������������������������������������������� 3.0 не поддерживают операторы отношений, но они поддерживаются в версии 2.6 и ниже, при этом они сравниваются как отсортированные списки (ключ, значение).•• Попытка сравнить значения несопоставимых нечисловых типов (например,1 < ‘spam’) в ����������������������������������������������������������Python���������������������������������������������������� 3.0 вызывает ошибку.

Зато такое сравнивание возможно в Python 2.6, однако при этом используется фиксированное и достаточнопроизвольно выбранное правило. То же относится и к операции сортировки, которая реализована на основе операции сравнения: коллекции значений нечисловых и несопоставимых типов в версии 3.0 отсортированы бытьне могут.Вообще сравнивание структурированных объектов выполняется, как если бысравнивались образующие их литералы, слева направо, по одному компонентуза раз. В последующих главах мы увидим другие типы объектов, которые могут изменять способ сравнения.Сравнивание словарей в Python 3.0Предпоследний пункт в списке из предыдущего раздела заслуживает особогопояснения. В �������������������������������������������������������������Python������������������������������������������������������� 2.6 и в более ранних версиях словари поддерживали возможность сравнения с помощью операторов отношений, как если бы сравнивались сортированные списки пар ключ/значение:C:\misc> c:\python26\python>>> D1 = {‘a’:1, ‘b’:2}>>> D2 = {‘a’:1, ‘b’:3}308Глава 9.

Кортежи, файлы и все остальное>>> D1 == D2False>>> D1 < D2TrueВ Python�������������������������������������������������������������������������������������������������������������������������������������� 3.0 поддержка операторов отношений в словарях была ликвидирована, потому что они оказываются слишком затратными, когда просто требуется узнать, равны ли словари (проверка на равенство в версии 3.0 выполняетсяпо оптимизированному алгоритму, который по факту не сравнивает отсортированные списки пар ключ/значение).

Чтобы выяснить относительный порядок словарей в версии 3.0, можно написать цикл и вручную сравнить значения ключей или вручную создать отсортированные списки пар ключ/значениеи сравнить их – для этого вполне достаточно будет задействовать метод словарей items и встроенную функцию sorted:C:\misc> c:\python30\python>>> D1 = {‘a’:1, ‘b’:2}>>> D2 = {‘a’:1, ‘b’:3}>>> D1 == D2False>>> D1 < D2TypeError: unorderable types: dict() < dict()>>> list(D1.items())[(‘a’, 1), (‘b’, 2)]>>> sorted(D1.items())[(‘a’, 1), (‘b’, 2)]>>> sorted(D1.items()) < sorted(D2.items())True>>> sorted(D1.items()) > sorted(D2.items())FalseНа практике в большинстве программ, где требуется выполнять сравниваниесловарей, реализуются собственные, более эффективные процедуры сравнения данных в словарях, чем данный способ или оригинальная реализацияв Python 2.6.Смысл понятий «истина» и «ложь» в языке PythonОбратите внимание, что три значения в кортеже, возвращаемом последнимпримером из предыдущего раздела, – это логические значения «истина» (true)и «ложь» (false).

Они выводятся на экран как слова True и False, но теперь, когдамы приступаем к использованию логических проверок, мне следует более формально описать смысл этих названий.В языке ���������������������������������������������������������������Python���������������������������������������������������������, как в большинстве языков программирования, «ложь» представлена целочисленным значением 0, а «истина» – целочисленным значением 1. Кроме того, интерпретатор Python распознает любую пустую структуруданных как «ложь», а любую непустую структуру данных – как «истину».В более широком смысле понятия истины и лжи – это свойства, присущиевсем объектам в Python, – каждый объект может быть либо «истиной», либо«ложью»:•• Числа, отличные от нуля, являются «истиной».•• Другие объекты являются «истиной», если они непустые.Сравнивание, равенство и истина309В табл. 9.4 приводятся примеры истинных и ложных значений объектов в языке Python.Таблица 9.4.

Примеры значений истинности объектовОбъектЗначение“spam”True“”False[]False{}False1True0.0FalseNoneFalseТак как объекты могут быть «истинными» или «ложными», в программах наязыке Python часто можно увидеть такие условные инструкции, как if X:, которая, если предположить, что X является строкой, равноценна инструкции ifX != ‘’:. Говоря другими словами, можно проверить истинность объекта вместотого, чтобы сравнивать его с пустым объектом. (Подробнее об инструкции ifрассказывается в третьей части III.)Объект NoneВ языке Python имеется также специальный объект с именем None (последняястрока в табл. 9.4), который всегда расценивается как «ложь». Объект None былпредставлен в главе 4 – это единственный специальный тип данных в языкеPython�������������������������������������������������������������������, который играет роль пустого заполнителя и во многом похож на указатель NULL в языке C.Например, вспомните, что списки не допускают присваивание значений отсутствующим элементам (списки не вырастают по волшебству, когда вы выполняете присваивание некоторого значения несуществующему элементу).

Чтобыможно было выполнять присваивание любому из 100 элементов списка, обычно создается список из 100 элементов, который заполняется объектами None:>>> L = [None] * 100>>>>>> L[None, None, None, None, None, None, None, ... ]В этом примере мы никак не ограничиваем размер списка (его по-прежнемупозднее можно будет увеличить или уменьшить), мы просто создаем списокопределенного размера, чтобы обеспечить возможность присваивания по индексам.

Характеристики

Тип файла
PDF-файл
Размер
12,21 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6352
Авторов
на СтудИзбе
311
Средний доход
с одного платного файла
Обучение Подробнее