Марк Лутц - Изучаем Python, Четвертое издание (1184811), страница 42
Текст из файла (страница 42)
Дляпреобразования целого числа в строку с представлением в любой из трехсистем счисления можно использовать встроенные функции hex(I), oct(I)и bin(I), кроме того, с помощью функции int(str, base) можно преобразоватьстроку в целое число с учетом указанного основания системы счисления.Комплексные числаЛитералы комплексных чисел в языке Python записываются в форматедействительная_часть+мнимая_часть, где мнимая_часть завершается символом j156Глава 5. Числаили J.
С технической точки зрения, действительная_часть является необязательной, поэтому мнимая_часть может указываться без действительной составляющей. Во внутреннем представлении комплексное число реализовано в виде двух вещественных чисел, но при работе с числами этого типаиспользуется математика комплексных чисел. Комплексные числа могуттакже создаваться с помощью встроенной функции complex(real, imag).Литералы других числовых типовКак мы увидим ниже в этой главе, существуют и другие числовые типы,не включенные в табл. 5.1. Объекты некоторых из этих типов создаютсяс помощью функций, объявленных в импортируемых модулях (например,вещественные числа с фиксированной точностью и рациональные числа),другие имеют свой синтаксис литералов (например, множества).Встроенные числовые операции и расширенияПомимо числовых литералов, которые приводятся в табл. 5.1, язык Pythonпредоставляет набор операций для работы с числовыми объектами:Операторы выражений+, -, *, /, >>, **, & и другие.Встроенные математические функцииpow, abs , round, int, hex, bin и другие.Вспомогательные модулиrandom, math и другие.По мере продвижения мы встретимся со всеми этими компонентами.Для работы с числами в основном используются выражения, встроенныефункции и модули, при этом числа имеют ряд собственных, специфическихметодов, с которыми мы также встретимся в этой главе.
Вещественные числа, например, имеют метод as_integer_ratio, который удобно использовать дляпреобразования вещественного числа в рациональное, а также метод is_integermethod, который проверяет – можно ли представить вещественное число как целое значение. Целые числа тоже обладают различными атрибутами, включаяновый метод bit_length, который появился в версии Python���������������������������������������������� 3.1, – он возвращает количество битов, необходимых для представления значения числа. Крометого, множества, отчасти являясь коллекциями, а отчасти числами, поддерживают собственные методы и операторы выражений.Так как выражения наиболее часто используются при работе с числами, мырассмотрим их в первую очередь.Операторы выраженийПожалуй, самой фундаментальной возможностью обработки чисел являютсявыражения: комбинации чисел (или других объектов) и операторов, которыевозвращают значения при выполнении интерпретатором Python.
Выраженияв языке Python записываются с использованием обычной математической нотации и символов операторов. Например, сложение двух чисел X и Y записывается в виде выражения X + Y, которое предписывает интерпретатору Pythonприменить оператор + к значениям с именами X и Y. Результатом выраженияX + Y будет другой числовой объект.157Базовые числовые типыВ табл. 5.2 приводится перечень всех операторов, имеющихся в языке Python.Многие из них достаточно понятны сами по себе, например обычные математические операторы (+, -, *, / и так далее). Некоторые будут знакомы тем, ктов прошлом использовал другие языки программирования: оператор % вычисляет остаток от деления, оператор << производит побитовый сдвиг влево, оператор& выполняет побитовую операцию И и т. д. Другие операторы более характерныдля языка Python, и не все имеют математическую природу.
Например, оператор is проверяет идентичность объектов (это более строгая форма проверки наравенство), оператор lambda создает неименованные функции и так далее.Таблица 5.2. Операторы выражений в языке Python и правила определениястаршинстваОператорыОписаниеyield xПоддержка протокола send в функциях-генераторахlambda args: expressionСоздает анонимную функциюx if y else zТрехместный оператор выбора (значение x вычисляется, только если значение y истинно)x or yЛогическая операция ИЛИ (значение y вычисляется, только если значение x ложно)x and yЛогический оператор И (значение y вычисляется,только если значение x истинно)not xЛогическое отрицаниеx in y, x not in yПроверка на вхождение (для итерируемых объектови множеств)x is y, x is not yПроверка идентичности объектовx < y, x <= y, x > y,x >= yОператоры сравнения, проверка на подмножествои надмножествоx == y, x != yОператоры проверки на равенствоx | yБитовая операция ИЛИ, объединение множествx ^ yБитовая операция «исключающее ИЛИ» (XOR),симметрическая разность множествx & yБитовая операция И, пересечение множествx << y, x >> yСдвиг значения x влево или вправо на y битовx, + yСложение, конкатенацияx – yВычитание, разность множествx * yУмножение, повторениеx % yОстаток, форматx / y, x // yДеление: истинное и с округлением вниз-x, +xУнарный знак «минус», тождественность~xБитовая операция НЕ (инверсия)158Глава 5.
ЧислаТаблица 5.2 (продолжение)ОператорыОписаниеx ** yВозведение в степеньx[i]Индексация (в последовательностях, отображенияхи других объектах)x[i:j:k]Извлечение срезаx(...)Вызов (функций, классов и других вызываемыхобъектов)x.attrОбращение к атрибуту(...)Кортеж, подвыражение, выражение-генератор[...]Список, генератор списков{...}Словарь, множество, генератор словарей и множествТак как в этой книге описываются обе версии Python 2.6 и 3.0, ниже приводятся некоторые примечания, касающиеся различий между версиями и последних дополнений, имеющих отношение к операторам из табл. 5.2:•• В версии Python 2.6 неравенство значений можно проверить двумя способами, как X != Y или как X <> Y. В Python 3.0 последний вариант был убран.В обеих версиях рекомендуется использовать выражение X != Y для проверки на неравенство.•• В версии Python 2.6 выражение в обратных кавычках `X` действует точнотак же, как вызов функции repr(X), и преобразует объект в строковое представление.
Из-за неочевидности функционального назначения это выражение было убрано из Python 3.0 – используйте более очевидные встроенныефункции str и repr, которые описываются в разделе «Форматы отображения чисел».•• Операция деления с округлением вниз (X // Y) всегда усекает дробную частьв обеих версиях Python 2.6 и 3.0. Операция деления X / Y в версии 3.0 выполняет истинное деление (возвращает результат с дробной частью), а в версии 2.6 – классическое деление (усекает результат до целого числа). Подробности ищите в разделе «Деление: классическое, с округлением вниз и истинное».•• Синтаксическая конструкция [...] используется для определения литералов и выражений-генераторов списков.
В последнем случае предполагаетсявыполнение цикла и накопление результатов в новом списке. Примеры использования этой конструкции приводятся в главах 4, 14 и 20.•• Синтаксическая конструкция (...) используется для определения кортежей, подвыражений и выражений-генераторов – разновидности генераторов списков, которая воспроизводит значения по требованию. Примеры использования этой конструкции приводятся в главах 4 и 20. Во всех трехслучаях круглые скобки могут опускаться.•• Синтаксическая конструкция {...} используется для определения литералов словарей, а в версии Python 3.0 еще и для определения литералов мно-Базовые числовые типы159жеств, и генераторов словарей и множеств.
Описание этой конструкцииприводится в этой главе, а примеры использования – в главах 4, 8, 14 и 20.•• Инструкция yield и трехместный оператор выбора if/else доступны в версии Python 2.5 и выше. Инструкция yield в функциях-генераторах возвращает аргументы функции send(...); оператор выбора if/else является краткой формой записи многострочной инструкции if. Если инструкция yield –не единственное, что находится справа от оператора присваиваивания, онадолжна заключаться в круглые скобки.•• Операторы отношений могут объединяться в цепочки: например X < Y < Zвоспроизводит тот же результат, что и конструкция X < Y and Y < Z.
Подробности приводятся в разделе «Операции сравнения: простые и составные»,ниже.•• В последних версиях Python выражение извлечения среза X[I:J:K] является эквивалентом операции индексирования с применением объекта среза:X[slice(I, J, K)].•• В �������������������������������������������������������������������Python������������������������������������������������������������� 2.����������������������������������������������������������X���������������������������������������������������������при выполнении операций сравнения числовые значения приводятся к общему типу, а упорядочение несовместимых типов выполняетсяпосредством сравнивания имен типов значений и считается допустимым.В ��������������������������������������������������������������������Python�������������������������������������������������������������� 3.0 не допускается сравнивать несовместимые типы, не являющиеся числами, а попытка такого сравнения вызывает исключение.•• Операторы отношений для словарей также больше не поддерживаютсяв Python 3.0 (однако поддерживается операция проверки на равенство).Один из возможных способов сравнивания словарей заключается в использовании функции sorted(dict.items()).Примеры использования большинства операторов из табл. 5.2 будут показаныпозже, а пока посмотрим, как операторы могут объединяться в выражения.Смешанные операторыи определение старшинства операторовКак и в большинстве других языков программирования, в языке Python можносоздавать сложные выражения, объединяя несколько операторов из табл. 5.2в одной инструкции.
Например, вычисление суммы двух произведений можнозаписать следующим образом:A * B + C * DКак в этом случае интерпретатор узнает, какие операторы должны выполняться в первую очередь? Ответ на этот вопрос заключается в старшинстве операторов. Когда интерпретатор Python встречает выражение, содержащее болееодного оператора, он делит его на отдельные части в соответствии с правилами старшинства и определяет порядок вычисления этих частей выражения.В табл. 5.2 операторы расположены в порядке возрастания старшинства:•• Чем выше приоритет оператора, тем ниже он находится в таблице и темраньше он выполняется в смешанных выражениях.•• Если в выражении имеется несколько операторов, находящихся в табл. 5.2в одной строке, они выполняются в направлении слева направо (исключение составляет оператор возведения в степень – эти операторы выполняются справа налево, и операторы отношений, которые объединяются в направлении слева направо).160Глава 5.