The Python Language Reference / Справочник по языку Python: 5. Expressions

← →
Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

5. Выражения

Hittih 12.07.10 в 22:04

0

Этот раздел разъясняет значение элементов выражений на Питоне.

Hittih 12.07.10 в 22:07

0

Замечание о синтаксисе:
В этом и следующем разделах расширенная нотация BNF будет использоваться для описания синтаксиса, а не для лексического анализа. Когда (как одна из альтернатив) синтактическое правило имеет форму

Hittih 12.07.10 в 22:21

0

name ::= othername

Hittih 12.07.10 в 22:21

0

и не даётся дальнейшей расшифровки, то такая формулировка подразумевает, что "name" значит то же, что и "othername" .

Hittih 01.08.10 в 09:01

0

-

Hittih 22.04.11 в 12:12

0

5.1. Арифметические преобразования

Hittih 22.04.11 в 12:06

0

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

Hittih 22.04.11 в 12:06

0

Если любой из аргументов является комплексным числом, то другое преобразуется к комплексному;

Hittih 22.04.11 в 12:05

0

иначе, если любой из аргументов является дробным числом, то другое преобразуется к дробному;

Hittih 22.04.11 в 12:01

0

если же оба целые, то никакого преобразования не требуется.

Hittih 22.04.11 в 12:01

0

К некоторым операторам применяются дополнительные правила (...) . Расширения должны определять свю собственную логику преобразований.

Hittih 22.04.11 в 12:00

0

5.2. Атомы

Hittih 22.04.11 в 11:59

0

Атомы являются самыми базовыми элементами выражений. Простейшими атомами являются идентификаторы и непосредственная запись данных ("литералы") . Формации заключённые в круглые, квадратные или фигурные скобки - тоже синтаксически относятся к атомам. Синтаксис атомов :

Hittih 22.04.11 в 11:59

0

<code>atom      ::= identifier | literal | enclosure
enclosure ::= parenth_form | list_display | dict_display | set_display
              | generator_expression | yield_atom</code>

Hittih 22.04.11 в 11:54

0

5.2.1. Идентификаторы (имена)

Hittih 22.04.11 в 11:58

0

Идентификатор в роли атома является именем. Смотрите лексическое определение в разделе "Идентификаторы и ключевые слова" , а также документацию по именованию и связыванию в разделе "Именование и связывание" .

Hittih 22.04.11 в 11:49

0

Когда данное имя назначено обьекту - интерпретация этого атома даёт этот обьект. Когда имя не назначено чему-либо - попытка интерпретировать его вызывает исключение "NameError" .

Hittih 22.04.11 в 11:49

0

Модифицирование частных (локальных) имён : Когда идентификатор, встретившийся в тексте определения класса, начинается с двух или более символов подчёркивания и не оканчивается двумя или более символами подчёркивания – он считается частным именем данного класса. Частные имена заменяются на их длинную форму при генерации соответствующего кода. Эти длинные формы образуются добавлением в начале имени класса, у которого удаляются все подчёркивания в начале и ставится одно подчёркивание. Например : идентификатор «__spam» в классе «Ham» будет преобразован в «_Ham__spam» . Это преобразование не зависит от синтаксического контекста, в котором идентификатор был использован. Следует помнить, что в некоторых реализациях Питона может происходить обрезание имён, больших определённой длинны. Имена, состоящие только из подчёркиваний – не модифицируются.

Hittih 22.04.11 в 11:47

0

5.2.2. Константы ("литералы")

Hittih 22.04.11 в 11:46

0

Питон поддерживает явную запись значений (константы) для текстов, байтов и различных типов чисел :

Hittih 22.04.11 в 11:46

0

<code>literal ::= stringliteral | bytesliteral
            | integer | floatnumber | imagnumber</code>

Hittih 22.04.11 в 11:40

0

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

Hittih 22.04.11 в 11:44

0

За исключением байтов – все они, по сути, соответствуют неизменяемым типам данных, и поэтому контроль идентичности такого объекта менее важен, чем значение объекта. Многократные упоминания явных записей с одинаковым значением (будь то многократный проход одного места программы или в разных местах) могут получать как тот же объект так и другой объект с таким же значением.

Hittih 22.04.11 в 11:32

0

5.2.3. Формы в скобках

Hittih 22.04.11 в 11:33

0

Формы в скобках – это необязательный список выражений, заключённый в скобки :

Hittih 22.04.11 в 11:33

0

<code>parenth_form ::= "(" [expression_list] ")"</code>

Hittih 22.04.11 в 11:30

0

Если в скобках перечисляются выражения через запятую, (в том числе единственное выражение с запятой после него, после которой идёт только закрывающая скобка) – результатом будет кортеж из вычисленных значений этих выражений. Если в скобках содержится единственное выражение без запятой – результатом будет просто вычисленное значение этого выражения.

Hittih 10.12.12 в 10:25

0

Список выражений, заключённый в скобки даёт в результате список значений этих выражений – но: если этот список содержит хотябы одну запятую, то образуется кортеж; иначе результатом будет значение единственного выражения списка.

Hittih 10.12.12 в 10:52

0

Пустая пара кавычек даёт объект пустого кортежа. Поскольку кортежи являются неизменяемыми, то к ним применяются правила для констант (тоесть, два упоминания пустых кортежей могут получать как тот же объект так и другой объект с таким же значением) .

Hittih 22.04.11 в 11:35

0

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

Hittih 22.04.11 в 11:36

0

5.2.4. Отображения для списков, наборов и словарей

Hittih 22.04.11 в 11:37

0

Для создания списков, наборов и словарей Питон предоставляет специальный синтаксис, называемый отображения “displays” , для каждого в двух вариантах :

Hittih 22.04.11 в 11:25

0

либо их содержимое перечисляется явно, либо

Hittih 22.04.11 в 11:24

0

они вычисляются с помощью набора циклических и фильтрующих инструкций, что называется «сборка (списка)» («генерация (списка)» , «компоновка (списка)» , «(list) comprehension») .

Hittih 22.04.11 в 11:23

0

Общий синтаксис сборок :

Hittih 22.04.11 в 11:23

0

<code>comprehension ::= expression comp_for
comp_for      ::= "for" target_list "in" or_test [comp_iter]
comp_iter     ::= comp_for | comp_if
comp_if       ::= "if" expression_nocond [comp_iter]</code>

Hittih 22.04.11 в 11:15

0

«Компоновка» состоит из одного выражения, после которого идёт минимум одно ключевое слово «for» после которого могут быть в любом количестве ключевые слова «for» или «if» . В случае, если таковые присутствуют, содержимое группы очередного из них – это то, что получается, если считать каждую группу «for» или «if» блоком, вложенным по отношению к тому, что левее, и интерпретировать это выражение, получая очередной элемент каждый раз, дойдя до самого внутреннего блока.

Hittih 22.04.11 в 11:22

0

Заметьте, что «компоновки» исполняются в отдельной области, поэтому имена, которым были назначения в списке приёмников, не «просачиваются» во внешнюю область.

Hittih 22.04.11 в 11:20

0

5.2.5. Отображение списков

Hittih 22.04.11 в 11:20

0

5.2.5. Отображение (запись, формулировка) списков

Hittih 24.05.11 в 10:35

0

Отображение списка – это последовательность выражений (может быть пустая), заключённая в квадратные скобки :

Hittih 22.04.11 в 11:19

0

<code>list_display ::= "[" [expression_list | comprehension] "]"</code>

Hittih 22.04.11 в 11:09

0

Запись списка даёт в результате объект-список, содержание которого определено или перечислением выражений, или конструкцией генерации (компонования) списка (“comprehension”) . В первом варианте, когда дан список выражений, разделённых запятой – его элементы интерпретируются слева направо – и помещаются в объект-список в том же порядке. Во втором варианте, когда дана конструкция компоновки списка – список составляется из элементов, генерируемых этой конструкцией.

Hittih 24.05.11 в 11:26

0

5.2.6. Отображение (запись, формулировка) множеств

Hittih 24.05.11 в 11:31

0

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

Hittih 24.05.11 в 11:41

0

<code>set_display ::= "{" (expression_list | comprehension) "}"</code>

Hittih 22.04.11 в 11:07

0

Запись множества даёт в результате изменяемый объект-множество, содержание которого определено или перечислением выражений, или конструкцией генерации (компонования) списков (“comprehension”) . В первом варианте, когда дан список выражений, разделённых запятой – его элементы интерпретируются слева направо – и добавляются к объекту-множеству. Во втором варианте, когда дана конструкция компоновки списков – множество составляется из элементов, генерируемых этой конструкцией.

Hittih 24.05.11 в 11:51

0

Пустое множество не может быть создано с помощью обозначения «<code>{}</code>» – эта запись создаёт пустой словарь.

Hittih 24.05.11 в 11:56

0

5.2.7. Запись (обозначение, формулировка) словарей

Hittih 24.05.11 в 11:59

0

Запись словаря – это последовательность (может быть пустая) пар ключ – данные, заключённая в фигурные скобки :

Hittih 24.05.11 в 12:05

0

<code>dict_display       ::= "{" [key_datum_list | dict_comprehension] "}"
key_datum_list     ::= key_datum ("," key_datum)* [","]
key_datum          ::= expression ":" expression
dict_comprehension ::= expression ":" expression comp_for</code>

Hittih 22.04.11 в 11:03

0
Минутку...

Следующая страница →