Саммерфилд - Программирование на Python 3 (1077331), страница 15
Текст из файла (страница 15)
В префиксах до- пускается использовать символы верхнего регистра. При работе с целыми числами могут использоваться обычные математические функции и операторы, как показано в табл. 2.2. Некоторые из функциональных возможностей представлены встроенными функциями, такими как зсв() (например, вызов асэ(1) вернет абсолютное значение целого числа !), а другие — операторами, применимыми к типу ! л! (например, выражение! + ) вернет сумму целых чисел 1 и ) ). Пользователи языка С должны обратить внимание, что одного ведущего 0 недостаточно, чтобы определить восьмеричное число — в языке Руб)топ сле- дует использовать комбинацию Ос (О и символ с). Для всех двухместных арифметических операторов (+, —, /, //, % и **) имеются соответствующие комбинированные операторы присваивания (+=, -=, /бч //=, %= и **=), где выражение х ор= у является логическим эквивалентом выражения х = х ор у, когда в обычной ситуации обращение к значению х не имеет побочных эффектов.
Объекты могут создаваться путем присваивания литералов переменным, например, х = 17, или обращением к имени соответствующего типа как к функции, например, х = тпт(17). Некоторые объекты (например, типа бес!ша1. Оесгва1) могут создаваться только посредством использования их типов, так как они не имеют литерального представления. Создание объекта посредством использования его типа может быть выполнено одним из трех способов.
Глава 2. Типы данных Таблица 2.2.Арифметические операторы и функции Синтаксис Описание Складывает число х и число у Вычитает число у из числа х умножает х на у хеу х-у х-у Делит х на у — результатом всегда является значение типа Г1сэе (или соэр1ех, если х нли у является комплексным числом) х/у Делит х на у, при этом усекает дробную часть, поэтому резуль- татом всегда является значение типа 1пе, смотрите также функ- цию гпппп() х // у Возвращает модуль (остаток) от деления х на у Возводит х з степень у, смотрите также функцию рсн( ) х%У х ° ° у Изменяет знак числа х, если оно не является нулем, если вольв ничего не происходит Ничего не делает, иногда используется для повышения удобо- читаемостн программного кода ех Возвращает абсолютное значение х ззз(х) С1уэоп(х, У) Возвращает частное н остаток деления х на у Кортежи, э виде кортежа двух значений типа 1пг стр. 32, 130 Возводит х з степень у; то же самое, что н оператор ° ° рсн(х, у) рсн(х, у, 2) гсппп(х, и) Более быстрая альтернатива выражению (х ° * у) % г Возвращает значение типа 1п1, соответствующее значению х ти.
па Г1озц округленному до ближайшего целого числа (или зна- чение типа Г)сап округленное до и-го знака после запятой, если задан аргумент и) Второй вариант — тип вызывается с единственным аргументом. Если указан аргумент соответствующего типа, будет создана поверхностная копия оригинального объекта. (Поверхностное копирование рассматривается в главе 3.) Если задан аргумент другого типа, будет предпринята попытка выполнить преобразование. Такой способ использования описывается в табл. 2.3. Если аргумент имеет тип, для которого поддерживается преобразование в требуемый тнп, и преобразование терпит неудачу, возбуждается исключение Ча1оеЕггог, в противном случае возвращается результат преобразования — объект Первый вариант — вызов типа данных без аргументов.
В этом случае объект приобретает значение по умолчанию, например, выражение х = 1пг() создаст целое число О. Любые встроенные типы могут вызывать- ся без аргументов. Целочисленные типы требуемого типа. Если тип аргумента не поддерживает преобразование в требуемый тип, возбуждается исключение ТуреЕггог. Встроенные типы (1081 и зтг поддерживают возможность преобразования в целое число. Точно так же возможно обеспечить преобразование в целое число ваших собственных типов данных, как будет показано в главе 6.
о Преобразование типов, стр. 298 Таблица 2.3. Функции преобразования целых чисел Синтаксис Описание Возвращает двоичное представление целого числа т з виде строки, например, Ып(1980) == '0011110111100' ош(т) Возвращает шестнадцатеричное представление целого числа т з виде строки, например, Пех(1980) == 'Ох7пс' Пех(т) Преобразует объект х з целое число; з случае ошибки зо время преобразования возбуждает исключение Ча1о е8 г го г, а если тип объекта х ие поддерживает преобразование в целое число, возбуждает исключение ТуреЕггог.
Если х является числом с плавающей точкой, озо преобразуется з целое число путем усечения дробной части. тпт(х) Преобразует строку в з целое число, з случае ошибки возбуж- дает исключение Ча1оеЕггог. Если задан необязательный аргу- мент паве, ои должен быть целым числом з диапазоне от 2 до 36 включительно. тпт(в, раве) Возвращает восьмеричное представление целого числа т в виде строки, например, ост(1980) == 'Оо3674' ост(т) Если имеется необходимость хранить множество флагов, способных иметь всего два состояния, можно использовать единственное целое число и проверять значения отдельных его битов с помощью битовых операторов.
То же самое можно делать менее компактным, но более удобным способом, воспользовавшись логическим типом. Третий вариант — когда передается два или более аргументов; не все типы поддерживают такую возможность, а для тех типов, что поддерживают ее, типы аргументов и их назначение отличаются. В случае типа 1пт допускается передавать два аргумента, где первый аргумент— зто строка с представлением целого числа, а второй аргумент — число основания системы счисления.
Например, вызов 1пс("Я4", 16) создаст десятичное значение 164. Этот вариант использования продемонстрирован в табл. 2.3. В табл. 2.4 перечислены битовые операторы. Все битовые операторы (Ц, 8, «и ») имеют соответствующие комбинированные операторы присваивания((=, =,8=, «= и »=), где выражение 1 ор= ) являетсялогическим зквивалентом выражения 1 = 1 ор ) в случае, когда обращение к значению 1 не имеет побочных аффектов. 76 Глава 2.
Типы данных Таблица 2.4. Битовые операторы, применимые н целым числам Синтаксис Описание Битовая операция ОЗ (ИЛИ) над целыми числами 1 н ); отрица- тельные числа представляются как двоичное дополнение Битовая операция ХОЯ (нсключающее ИЛИ) над целыми числа- мн(н) Битовая операция АМО (И) над целыми числами 1 н ) 1е) 1 << Сдвигает значение 1 влево на ) битов аналогично операции > (2 ** ) ) без проверки на переполнение Сдвигает значение 1 вправо на ) битов аналогично операции 1 // (2 ° ° ) ) без проверки на переполнение 1 » ) Инвертирует биты числа 1 Логические значения Существует два встроенных логических объекта: Тгое и Га1ве.
Как и все остальные типы данных в языке Ру(Ьоп (встроенные, библиотечные или ваши собственные), тип данных Ьоо1 может вызываться как функция — при вызове без аргументов возвращается значение Га1ве, при вызове с аргументом типа Ьоо1 возвращается копия аргумента, а при вызове с любым другим аргументом предпринимается попытка преобразовать указанный объект в тип Ьсс!. Все встроенные типы данных и типы данных из стандартной библиотеки могут быть преобразованы в тип Ьоа1, а добавить поддержку такого преобразования в свои собственные типы данных не представляет никакой сложности. Ниже приводится пара присваиваний логических значений и пара логических выражений: »> 1 = Тгое »> Г = Ге1ве »> 1 ало Г Ге!ее »> 1 епа Тгое Тгое Программисты, использовавшие старые версии языка Ру(Ьоп, иногда вместо Тгое и Га1ве используют числа 1 и Π— такой прием срабатывает практически всегда, но в новых программах, когда возникает необхо- о Как уже отмечалось ранее, в языке Ру1Ьоп имеется три Логические опереторы, логических опеРатоРа: апб, ог и по1.
ВыРажениЯ с Учасгв39 стием операторов апб и ог вычисляются в соответствии с логикой сокращенных вычислений (зЬогг-с(гсия !оа!с), и возвращается операнд, определяющий значение всего выражения, тогда как результатом оператора по1 всегда является либо Тгсе, либо Еа1ве. 77 Тип чисел с плавающей точкой димость в логическом значении, следует использовать встроенные ло- гические объекты. Тип чисел с плавающей точкой Язык Ру(Ьоп предоставляет три типа значений с плавающей точкой: встроенные типы т!оат и соар1ех и тип Оестаа1. Оесша1 в стандартной библиотеке.
Все три типа данных относятся к категории неизменяемых. Тип т1оат представляет числа с плавающей точкой двойной точности, диапазон значений которых зависит от компилятора языка С (или С№ или Тача), применявшегося для компиляции интерпретатора Ру(Ьоп. Числа этого типа имеют ограниченную точность и не могут надежно сравниваться на равенство значений. Числа типа т1оат записываются с десятичной точкой или в экспоненциальной форме записи, например, 0.0, 4., 5.7, -2.5, -2е9, 8.9е-4. В машинном представлении числа с плавающей точкой хранятся как двоичные числа.
Это означает, что одни дробные значения могут быть представлены точно (такие как 0.5), а другие — только приблизительно (такие как 0.1 и 0.2). Кроме того, для представления используется фиксированное число битов, поэтому существует ограничение на количество цифр в представлении таких чисел. Ниже приводится поясняющий пример, полученный в ПИ Е: »> 0.0, 5.4, -2.5, 8.9е-4 (0.0, 5.4000000000000004, -2.5, 0.00088999999999999995) Проблема потери точности — это не проблема, свойственная только языку Ру(Ьоп; все языки программирования обнаруживают проблему с точным представлением чисел с плавающей точкой.
Если вам действительно необходимо обеспечить высокую точность, можно использовать числа типа бесшв1. Оества1. Эти числа обеспечивают уровень точности, который вы укажете (по умолчанию 28 знаков после запятой), и могут точно представлять периодические числа, такие как 0.1', но скорость работы с такими числами существенно ниже, чем с обычными числами типа т1оат.
Вследствие высокой точности числа типа бес(ва1. Оес(аа1 прекрасно подходят для производства финансовых вычислений. Смешанная арифметика поддерживается таким образом, что результатом выражения с участием чисел типов 101 и т1081 является число типа т1081, а с участием типов т1оат и созр1ех результатом является число типа соар1ех. Поскольку числа типа бес)за1. Оестаа1 имеют фиксированную точность, они могут участвовать в выражениях только В десятичной системе счисления число 0.1 ве является периодической дробью, во в двоичной (то есть в машинном представлении), — это действительно периодическая дробь.
— Прим. перев. 78 Глаза 2. Типы данных с другими числами дес1аа1. Оесгаа1 и с числами типа (пг; результатом таких выражений является число Оесша1. 0ес1ва1. В случае попытки выполнить операцию над несовместимыми типами возбуждается исключение ТуреЕг гог. Числа с плавающей точкой Все числовые операторы и функции, представленные в табл. 2.2 (стр. 74), могут применяться к числам типа (1оаг, включая комбинированные операторы присваивания. Тип данных (1оат может вызываться как функция — без аргументов возвращается число 0.0, с аргументом типа (1оа( возвращается копия аргумента, а с аргументом любого другого типа предпринимается попытка выполнить преобразование указанного объекта в тип (1оак При преобразовании строки аргумент может содержать либо простую форму записи числа с десятичной точкой, либо экспоненциальное представление числа. При выполнении операций с числами типа (1оа( может возникнуть ситуация, когда в результате получается значение ХаХ (по( а пшпЬег — не число) или «бесконечность».