Язык программирования Python - Страница 5

Ознакомительная версия. Доступно 13 страниц из 62.
Изменить размер шрифта:

Приоритет операций показан в нижеследующей таблице (в порядке уменьшения). Для унарных операций x обозначает операнд. Ассоциативность операций в Python — слева–направо, за исключением операции возведения в степень (**), которая ассоциативна справа налево.

Операция Название

lambda лямбда–выражение

or логическое ИЛИ

and логическое И

not x логическое НЕ

in, not in проверка принадлежности

is, is not проверка идентичности

<,<=,>,>=,!=,== сравнения

| побитовое ИЛИ

^ побитовое исключающее ИЛИ

& побитовое И

<<, >> побитовые сдвиги

+, — сложение и вычитание

*, /, % умножение, деление, остаток

+x, — x унарный плюс и смена знака

~x побитовое НЕ

** возведение в степень

x.атрибут ссылка на атрибут

x[индекс] взятие элемента по индексу

x[от:до] выделение среза (от и до)

f(аргумент,…) вызов функции

( … ) скобки или кортеж

[ … ] список или списковое включение

{кл:зн, …} словарь пар ключ–значение

`выражения` преобразование к строке (repr)

Таким образом, порядок вычислений операндов определяется такими правилами:

Операнд слева вычисляется раньше операнда справа во всех бинарных операциях, кроме возведения в степень.

Цепочка сравнений вида a < b < c … y < z фактически равносильна: (а < b) and (b < c) and … and (y < z).

Перед фактическим выполнением операции вычисляются нужные для нее операнды. В большинстве бинарных операций предварительно вычисляются оба операнда (сначала левый), но операции or и and , а также цепочки сравнений вычисляют такое количество операндов, которое достаточно для получения результата. В невычисленной части выражения в таком случае могут даже быть неопределенные имена. Это важно учитывать, если используются функции с побочными эффектами.

Аргументы функций, выражения для списков, кортежей, словарей и т.п. вычисляются слева–направо, в порядке следования в выражении.

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

Листинг

print "%i» % (i*j)

Выражения могут фигурировать во многих операторах Python и даже как самостоятельный оператор. У выражения всегда есть результат, хотя в некоторых случаях (когда выражение вычисляется ради побочных эффектов) этот результат может быть «ничем» — None.

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

Имена

Об именах (идентификаторах) говорилось уже не раз, тем не менее, необходимо сказать несколько слов об их применении в языке Python.

Имя может начинаться с латинской буквы (любого регистра) или подчеркивания, а дальше допустимо использование цифр. В качестве идентификаторов нельзя применять ключевые слова языка и нежелательно переопределять встроенные имена. Список ключевых слов можно узнать так:

Листинг

>>> import keyword

>>> keyword.kwlist

['and', 'assert', 'break', 'class', 'continue', 'def', 'del',

'elif', 'else', 'except', 'exec', 'finally', 'for', 'from',

'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or',

'pass', 'print', 'raise', 'return', 'try', 'while', 'yield']

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

В каждой точке программы интерпретатор «видит» три пространства имен: локальное, глобальное и встроенное. Пространство имен — отображение из имен в объекты.

Для понимания того, как Python находит значение некоторой переменной, необходимо ввести понятие блока кода. В Python блоком кода является то, что исполняется как единое целое, например, тело определения функции, класса или модуля.

Локальные имена — имена, которым присвоено значение в данном блоке кода. Глобальные имена — имена, определяемые на уровне блока кода определения модуля или те, которые явно заданы в операторе global. Встроенные имена — имена из специального словаря __builtins__.

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

Так как переменную можно связать с объектом в любом месте блока, важно, чтобы это произошло до ее использования, иначе будет возбуждено исключение NameError. Связывание имен со значениями происходит в операторах присваивания, for, import, в формальных аргументах функций, при определении функции или класса, во втором параметре части except оператора try–except.

С областями видимости и связыванием имен есть много нюансов, которые хорошо описаны в документации. Желательно, чтобы программы не зависели от таких нюансов, а для этого достаточно придерживаться следующих правил:

Всегда следует связывать переменную со значением (текстуально) до ее использования.

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

Никогда не следует использовать from модуль import * - это может привести к затенению имен из других модулей, а внутри определения функции просто запрещено.

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

Убрать связь имени с объектом можно с помощью оператора del. В этом случае, если объект не имеет других ссылок на него, он будет удален. Для управления памятью в Python используется подсчет ссылок (reference counting), для удаления наборов объектов с зацикленными ссылками — сборка мусора (garbage collection).

Стиль программирования

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

Стиль программирования затрагивает практически все аспекты написания кода:

именование объектов в зависимости от типа, назначения, области видимости;

оформление функций, методов, классов, модулей и их документирование в коде программы;

декомпозиция программы на модули с определенными характеристиками;

способ включения отладочной информации;

применение тех или иных функций (методов) в зависимости от предполагаемого уровня совместимости разрабатываемой программы с различными компьютерными платформами;

ограничение используемых функций из соображений безопасности.

Для языка Python Гвидо ван Россум разработал официальный стиль. С оригинальным текстом «Python Style Guide» можно ознакомиться по адресу http://www.python.org/doc/essays/styleguide.html.

Оригинальный текст книги читать онлайн бесплатно в онлайн-библиотеке Knigger.com