Саммерфилд - Программирование на Python 3 (1077331), страница 14
Текст из файла (страница 14)
2.1. Таблица 2.1. Ключевые слова языка Ру!/»оп С многими из них мы уже встречались в предыдущей главе, хотя 11 ключевых слов — зэзегт, с1аээ, бе1, !!па11у, !гоп, 91осз1, 1звЬОа, псп1сса1, га!эе, и!тп и у!е1С мы еще не рассматривали. Первое соглашение выглядит так: «Не использовать в качестве своих идентификаторов любые предопределенные имена». Поэтому старай- И!!рс//боев.ру!!»оп.огу/3.0/ге/егепее/1ех!еа1 апа!уз!з./стт!Ф !с!епс!/!егз.апб)теушогс!з. — Прим.
перев. Аббревиатура «РЕР» расшифровывается как Ру!Ъоп ЕлЪапсешеп! Ргороза1 (предложение по расширению РХФЪоп). Если кто-то желает изменить или дополнить язык Ру!Ъоп, и его стремление пользуется широкой поддержкой сообщества, он посылает РЕР с подробным описанием своего предложения, чтобы его можно было рассмотреть з официальном порядке; в некоторых случаях, как это произошло с РЕР 3131, предложение принимается и реализуется. Все предложения РЕР можно найти на странице шшш.ру!/«оп.огу/беи/рерз/.
Глава 2. Типы даииых тесь не использовать такие идентификаторы, как йот1зр1евеп!еб и Е1- 1!рвгв, имена любых встроенных типов (таких как !пт, [1оаг, 1!в!, в!г и !Ьр1е), а также имена любых встроенных функций или исключений. Как определить, относится ли тот или иной идентификатор к этим категориям2 В языке РуФЬоп имеется встроенная функция Ь! г( ), которая возвращает список атрибутов объекта.
Если эта функция вызывается беэ аргументов, она возвращает список встроенных атрибутов языка РуФЬоп. Например: »> огг() Ьо!1ггпв ', ' Ооо ', ' папе ') Атрибут Ьо!1!!пв в действительности является модулем, в котором определены все встроенные атрибуты языка РуФЬоп. Его можно использовать в качестве аргумента функции а! г(): »> Шг( Ьо!11!пв ) [ Агггпэеггоеггог, Аввегггопеггог, Аггыьогаеггог 'вра', 'вррег', 'гор1е', 'гура', 'чагв', Емр') В списке присутствует более 130 имен, поэтому мы опустили значительную их часть. Имена, начинающиеся с символов верхнего регистра, являются именами встроенных исключений.
Остальные имена представляют функции и типы данных. Если запоминание или поиск идентификаторов, использования которых следует избегать, кажется вам слишком утомительным, то можно воспользоваться инструментом проверки программного кода на языке Ру(Ьоп, таким как Ру) !пЬ (шшш [оа![аЬ.ога/рго/ес!/пате/ру((п!). Этот инструмент поможет вам также выявлять множество других фактических или потенциальных проблем в программах на языке РуЬЬоп. Второе соглашение касается использования символа подчеркивания ( ). Не должны использоваться имена, начинающиеся и заканчивающиеся двумя символами подчеркивания (такие как 1! ).
В языке Ру$Ьоп определено множество различных специальных методов и переменных с такими именами (и в случае специальных методов мы можем заменять их, то есть создать свои версии этих методов), но мы не должны вводить новые имена такого рода. Такие имена будут рассматриваться в главе 6. Имена, начинающиеся с одного или двух символов подчеркивания (и не завершающиеся двумя символами подчеркивания), в некоторых контекстах интерпретируются как специальные. Мы продемонстрируем это в главе 5, когда будем использовать имена, начинающиеся с одного символа подчеркивания, и в главе 6, когда будем использовать имена, начинающиеся с двух символов подчеркивания.
Символ подчеркивания сам по себе может использоваться в качестве идентификатора; внутри интерактивной оболочки интерпретатора или в командной оболочке Ру(Ьоп в переменной с именем сохраняется ре- Идентификаторы и ключевые слова зультат последнего вычисленного выражения. Во время выполнения обычной программы идентификатор отсутствует, если мы явно не определяем его в своем программном коде. Некоторые программисты любят использовать в качестве идентификатора переменной цикла в циклах тог ...
тп, когда не требуется обращаться к элементам, по которым выполняются итерации. Например: Гог 1п (О, т, 2, 3, 4, 5): р г1п т ( "Не11о" ) Но имейте в виду, что те, кто пишет программы, кото- Инструкция рые затем интернационализируются, часто используют идентификатор в качестве имени функции перевода.
стр.53,230 Делается это, чтобы вместо необходимости писать всякий раз дешехт.дестекс("Тгзпз1ате ве") можно было писать ("Тгапз1ате зе"). (Чтобы можно было выполнить такой вызов, мы сначала должны импортировать модуль де!техт, чтобы получить доступ к функции де!техт(), находящейся в этом модуле). Давайте рассмотрим примеры допустимых идентификаторов во фрагменте программного кода, написанного программистом, говорящим на испанском языке. Здесь предполагается, что была выполнена инструкция 1врогт ватв и где-то выше в программе определены переменные га01оичте)а агев: к' = яаШ.
р! е = 0.0000001 поеча агеа = л * таста * гас1о !Г аос(пряча агеа - чте)а Йгеа) < е: рг1пт("1ая ягеас Пап сопчегдтоо") Мы использовали здесь модуль ватл, записали в эпсилон (е) очень маленькое число с плавающей точкой и с помощью функции 303() нашли абсолютное значение разницы площадей — обо всем об этом мы поговорим ниже, в этой же главе. Здесь следует обратить внимание на то, что мы можем использовать в идентификаторах национальные символы и символы греческого алфавита. С той же легкостью мы могли бы использовать арабские, китайские, еврейские, японские и русские символы и практически любые другие алфавитные символы, поддерживаемые кодировкой Юникод. Самый простой способ проверить допустимость идентификатора состоит в том, чтобы попробовать присвоить ему некоторое значение в интерактивной оболочке интерпретатора Ру1)топ или в командной оболочке Ру1)топ среды 11П Е.
Ниже приводятся несколько примеров: »> в!ге!оп-гастог = т 3уптахЕггог; сап'т аяв!дп то орегатог (...) Это символ «пи» греческого алфавита (к). — Прим. перев. 72 Глава 2. Типы данных (ЗуптахЕггог: невозможно выполнить присваивание оператору (...)) »> 2ш>!ез = 2 ВуптахЕггог: !пча1>О аул!ах (...) (БуптахЕггог: синтаксическая ошибка (...)) »> зтг = 3 а Допустимо, но неправильно »> !'!шрб(31 = 4 ЯуптахЕггог; ЕОЕ нл>1е зсапп>пр з1пр1е-Оцотео зтгтпр (...) (БултахЕггог: встречен конец строки при анализе строки в апострофах (...)) »> 1 !шрд(31 = 5 »> Попытка использовать недопустимый идентификатор вызывает исключение ЗупсахЕггог.
В каждом конкретном случае изменяется часть текста сообщения, которая окружена круглыми скобками, поэтому эту часть мы заменили многоточием. В первом примере ошибка обусловлена попыткой использовать символ»-», который не является алфавитным символом Юникода, цифрой или символом подчеркивания. Во втором случае ошибка произошла из-за того, что начальный символ не является алфавитным символом Юникода или символом подчеркивания.
Если идентификатор допустим, исключение не возникает, даже если выбранный идентификатор совпадает с именем встроенного типа данных, исключения или функции, поэтому третий пример присваивания не вызвал ошибку, хотя выбор такого идентификатора — опрометчивый шаг. В четвертом примере ошибка вызвана использованием символа апострофа, который не является алфавитным символом Юникода, цифрой или символом подчеркивания. Пятый пример— пример подходящего варианта.
Целочисленные типы В языке РуфЬоп имеется два целочисленных типа, тп1 и Ьоо1.' И целые числа, и логические значения являются неизменяемыми объектами, но благодаря присутствию в языке РуФЬоп комбинированных операторов присваивания зта особенность практически незаметна. В логических выражениях число О и значение Еа1зе представляют Еа1зе, а любое другое целое число и значение Тгое представляют Тгое. В числовых выражениях значение Тгцв представляет 1, а Еа1зе — О.
Это означает, что можно записывать весьма странные выражения, например, выра. жение !»= Тгце увеличит значение ! на единицу. Естественно, более правильным будет записывать подобные выражения как !»= 1. В стандартной библиотеке также определяется тнп (гас(тола. пласт!оп (ра. цнональные числа неограниченной точности), который может пригодиться прн выполнении некоторых математических и научных вычислений. Целочисленные типы Целые числа Размер целого числа ограничивается только объемом памяти компьютера, поэтому легко можно создать и обрабатывать целое число, состоящее из тысяч цифр, правда, скорость работы с такими числами существенно медленнее, чем с числами, которые соответствуют машинному представлению. Литералы целых чисел по умолчанию записываются в десятичной системе счисления, но при желании можно использовать другие системы счисления: »> 14600926 Ф десятичное число 14600926 »> ОЫ 10111101100101011011110 Ф двоичное число 14600926 »> Ос67545336 14600926 »> ОхОЕСАОЕ Л шестнадцатеричное число 14600926 Л восьмеричное число Двоичные числа записываются с префиксом ОО, восьмеричные — в пре- фиксом Ос' и шестнадцатеричные — с префиксом Ох.