[3.14] gh-135676: Reword the Operators & Delimiters section(s) (GH-137713) (#138457)

Co-authored-by: Petr Viktorin <encukou@gmail.com>
Co-authored-by: Blaise Pabon <blaise@gmail.com>
Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
This commit is contained in:
Miss Islington (bot) 2025-09-11 11:22:56 +02:00 committed by GitHub
parent dd930baf45
commit 15ca9c6816
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1351,67 +1351,62 @@ Formally, imaginary literals are described by the following lexical definition:
imagnumber: (`floatnumber` | `digitpart`) ("j" | "J") imagnumber: (`floatnumber` | `digitpart`) ("j" | "J")
.. _operators:
Operators
=========
.. index:: single: operators
The following tokens are operators:
.. code-block:: none
+ - * ** / // % @
<< >> & | ^ ~ :=
< > <= >= == !=
.. _delimiters: .. _delimiters:
.. _operators:
Delimiters
==========
.. index:: single: delimiters
The following tokens serve as delimiters in the grammar:
.. code-block:: none
( ) [ ] { }
, : ! . ; @ =
The period can also occur in floating-point and imaginary literals.
.. _lexical-ellipsis: .. _lexical-ellipsis:
A sequence of three periods has a special meaning as an Operators and delimiters
:py:data:`Ellipsis` literal: ========================
.. code-block:: none .. index::
single: operators
single: delimiters
... The following grammar defines :dfn:`operator` and :dfn:`delimiter` tokens,
that is, the generic :data:`~token.OP` token type.
A :ref:`list of these tokens and their names <token_operators_delimiters>`
is also available in the :mod:`!token` module documentation.
The following *augmented assignment operators* serve .. grammar-snippet::
lexically as delimiters, but also perform an operation: :group: python-grammar
.. code-block:: none OP:
| assignment_operator
| bitwise_operator
| comparison_operator
| enclosing_delimiter
| other_delimiter
| arithmetic_operator
| "..."
| other_op
-> += -= *= /= //= %= assignment_operator: "+=" | "-=" | "*=" | "**=" | "/=" | "//=" | "%=" |
@= &= |= ^= >>= <<= **= "&=" | "|=" | "^=" | "<<=" | ">>=" | "@=" | ":="
bitwise_operator: "&" | "|" | "^" | "~" | "<<" | ">>"
comparison_operator: "<=" | ">=" | "<" | ">" | "==" | "!="
enclosing_delimiter: "(" | ")" | "[" | "]" | "{" | "}"
other_delimiter: "," | ":" | "!" | ";" | "=" | "->"
arithmetic_operator: "+" | "-" | "**" | "*" | "//" | "/" | "%"
other_op: "." | "@"
The following printing ASCII characters have special meaning as part of other .. note::
tokens or are otherwise significant to the lexical analyzer:
.. code-block:: none Generally, *operators* are used to combine :ref:`expressions <expressions>`,
while *delimiters* serve other purposes.
However, there is no clear, formal distinction between the two categories.
' " # \ Some tokens can serve as either operators or delimiters, depending on usage.
For example, ``*`` is both the multiplication operator and a delimiter used
for sequence unpacking, and ``@`` is both the matrix multiplication and
a delimiter that introduces decorators.
The following printing ASCII characters are not used in Python. Their For some tokens, the distinction is unclear.
occurrence outside string literals and comments is an unconditional error: For example, some people consider ``.``, ``(``, and ``)`` to be delimiters, while others
see the :py:func:`getattr` operator and the function call operator(s).
.. code-block:: none Some of Python's operators, like ``and``, ``or``, and ``not in``, use
:ref:`keyword <keywords>` tokens rather than "symbols" (operator tokens).
$ ? ` A sequence of three consecutive periods (``...``) has a special
meaning as an :py:data:`Ellipsis` literal.