@@ -9,9 +9,11 @@ Expressions
99
1010This chapter explains the meaning of the elements of expressions in Python.
1111
12- **Syntax Notes: ** In this and the following chapters, extended BNF notation will
13- be used to describe syntax, not lexical analysis. When (one alternative of) a
14- syntax rule has the form
12+ **Syntax Notes: ** In this and the following chapters,
13+ :ref: `grammar notation <notation >` will be used to describe syntax,
14+ not lexical analysis.
15+
16+ When (one alternative of) a syntax rule has the form:
1517
1618.. productionlist :: python-grammar
1719 name: othername
@@ -29,17 +31,13 @@ Arithmetic conversions
2931
3032When a description of an arithmetic operator below uses the phrase "the numeric
3133arguments are converted to a common real type", this means that the operator
32- implementation for built-in types works as follows:
33-
34- * If both arguments are complex numbers, no conversion is performed;
35-
36- * if either argument is a complex or a floating-point number, the other is converted to a floating-point number;
37-
38- * otherwise, both must be integers and no conversion is necessary.
34+ implementation for built-in numeric types works as described in the
35+ :ref: `Numeric Types <stdtypes-mixed-arithmetic >` section of the standard
36+ library documentation.
3937
40- Some additional rules apply for certain operators (e.g., a string as a left
41- argument to the '%' operator). Extensions must define their own conversion
42- behavior.
38+ Some additional rules apply for certain operators and non-numeric operands
39+ (for example, a string as a left argument to the `` % `` operator).
40+ Extensions must define their own conversion behavior.
4341
4442
4543.. _atoms :
@@ -49,15 +47,57 @@ Atoms
4947
5048.. index :: atom
5149
52- Atoms are the most basic elements of expressions. The simplest atoms are
53- identifiers or literals. Forms enclosed in parentheses, brackets or braces are
54- also categorized syntactically as atoms. The syntax for atoms is:
50+ Atoms are the most basic elements of expressions.
51+ The simplest atoms are :ref: `names <identifiers >` or literals.
52+ Forms enclosed in parentheses, brackets or braces are also categorized
53+ syntactically as atoms.
5554
56- .. productionlist :: python-grammar
57- atom: `identifier ` | `literal ` | `enclosure `
58- enclosure: `parenth_form ` | `list_display ` | `dict_display ` | `set_display `
59- : | `generator_expression ` | `yield_atom `
55+ Formally, the syntax for atoms is:
56+
57+ .. grammar-snippet ::
58+ :group: python-grammar
59+
60+ atom:
61+ | 'True'
62+ | 'False'
63+ | 'None'
64+ | '...'
65+ | `identifier`
66+ | `literal`
67+ | `enclosure`
68+ enclosure:
69+ | `parenth_form`
70+ | `list_display`
71+ | `dict_display`
72+ | `set_display`
73+ | `generator_expression`
74+ | `yield_atom`
75+
76+
77+ .. _atom-singletons :
78+
79+ Built-in constants
80+ ------------------
81+
82+ The keywords ``True ``, ``False ``, and ``None `` name
83+ :ref: `built-in constants <built-in-consts >`.
84+ The token ``... `` names the :py:data: `Ellipsis ` constant.
6085
86+ Evaluation of these atoms yields the corresponding value.
87+
88+ .. note ::
89+
90+ Several more built-in constants are available as global variables,
91+ but only the ones mentioned here are :ref: `keywords <keywords >`.
92+ In particular, these names cannot be reassigned or used as attributes:
93+
94+ .. code-block :: pycon
95+
96+ >>> False = 123
97+ File "<input>", line 1
98+ False = 123
99+ ^^^^^
100+ SyntaxError: cannot assign to False
61101
62102 .. _atom-identifiers :
63103
@@ -131,51 +171,104 @@ Literals
131171
132172.. index :: single: literal
133173
134- Python supports string and bytes literals and various numeric literals:
174+ A :dfn: `literal ` is a textual representation of a value.
175+ Python supports numeric, string and bytes literals.
176+ :ref: `Format strings <f-strings >` and :ref: `template strings <t-strings >`
177+ are treated as string literals.
178+
179+ Numeric literals consist of a single :token: `NUMBER <python-grammar:NUMBER> `
180+ token, which names an integer, floating-point number, or an imaginary number.
181+ See the :ref: `numbers ` section in Lexical analysis documentation for details.
182+
183+ String and bytes literals may consist of several tokens.
184+ See section :ref: `string-concatenation ` for details.
185+
186+ Note that negative and complex numbers, like ``-3 `` or ``3+4.2j ``,
187+ are syntactically not literals, but :ref: `unary <unary >` or
188+ :ref: `binary <binary >` arithmetic operations involving the ``- `` or ``+ ``
189+ operator.
190+
191+ Evaluation of a literal yields an object of the given type
192+ (:class: `int `, :class: `float `, :class: `complex `, :class: `str `,
193+ :class: `bytes `, or :class: `~string.templatelib.Template `) with the given value.
194+ The value may be approximated in the case of floating-point
195+ and imaginary literals.
196+
197+ The formal grammar for literals is:
135198
136199.. grammar-snippet ::
137200 :group: python-grammar
138201
139202 literal: `strings ` | `NUMBER `
140203
141- Evaluation of a literal yields an object of the given type (string, bytes,
142- integer, floating-point number, complex number) with the given value. The value
143- may be approximated in the case of floating-point and imaginary (complex)
144- literals.
145- See section :ref: `literals ` for details.
146- See section :ref: `string-concatenation ` for details on ``strings ``.
147-
148204
149205.. index ::
150206 triple: immutable; data; type
151207 pair: immutable; object
152208
209+ Literals and object identity
210+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
211+
153212All literals correspond to immutable data types, and hence the object's identity
154213is less important than its value. Multiple evaluations of literals with the
155214same value (either the same occurrence in the program text or a different
156215occurrence) may obtain the same object or a different object with the same
157216value.
158217
218+ .. admonition :: CPython implementation detail
219+
220+ For example, in CPython, *small * integers with the same value evaluate
221+ to the same object::
222+
223+ >>> x = 7
224+ >>> y = 7
225+ >>> x is y
226+ True
227+
228+ However, large integers evaluate to different objects::
229+
230+ >>> x = 123456789
231+ >>> y = 123456789
232+ >>> x is y
233+ False
234+
235+ This behavior may change in future versions of CPython.
236+ In particular, the boundary between "small" and "large" integers has
237+ already changed in the past.
238+
239+ CPython will emit a :py:exc: `SyntaxWarning ` when you compare literals
240+ using ``is ``::
241+
242+ >>> x = 7
243+ >>> x is 7
244+ <input>:1: SyntaxWarning: "is" with 'int' literal. Did you mean "=="?
245+ True
246+
247+ See :ref: `faq-identity-with-is ` for more information.
248+
249+ :ref: `Template strings <t-strings >` are immutable but may reference mutable
250+ objects as :class: `~string.templatelib.Interpolation ` values.
251+ For the purposes of this section, two t-strings have the "same value" if
252+ both their structure and the *identity * of the values match.
253+
254+ .. impl-detail ::
255+
256+ Currently, each evaluation of a template string results in
257+ a different object.
258+
159259
160260.. _string-concatenation :
161261
162262String literal concatenation
163263^^^^^^^^^^^^^^^^^^^^^^^^^^^^
164264
165- Multiple adjacent string or bytes literals (delimited by whitespace) , possibly
265+ Multiple adjacent string or bytes literals, possibly
166266using different quoting conventions, are allowed, and their meaning is the same
167267as their concatenation::
168268
169269 >>> "hello" 'world'
170270 "helloworld"
171271
172- Formally:
173-
174- .. grammar-snippet ::
175- :group: python-grammar
176-
177- strings: ( `STRING ` | `fstring `)+ | `tstring`+
178-
179272This feature is defined at the syntactical level, so it only works with literals.
180273To concatenate string expressions at run time, the '+' operator may be used::
181274
@@ -208,6 +301,13 @@ string literals::
208301 >>> t"Hello" t"{name}!"
209302 Template(strings=('Hello', '!'), interpolations=(...))
210303
304+ Formally:
305+
306+ .. grammar-snippet ::
307+ :group: python-grammar
308+
309+ strings: (`STRING ` | `fstring `)+ | `tstring`+
310+
211311
212312.. _parenthesized :
213313
@@ -1372,8 +1472,9 @@ for the operands): ``-1**2`` results in ``-1``.
13721472
13731473The power operator has the same semantics as the built-in :func: `pow ` function,
13741474when called with two arguments: it yields its left argument raised to the power
1375- of its right argument. The numeric arguments are first converted to a common
1376- type, and the result is of that type.
1475+ of its right argument.
1476+ Numeric arguments are first :ref: `converted to a common type <stdtypes-mixed-arithmetic >`,
1477+ and the result is of that type.
13771478
13781479For int operands, the result has the same type as the operands unless the second
13791480argument is negative; in that case, all arguments are converted to float and a
@@ -1459,9 +1560,10 @@ operators and one for additive operators:
14591560
14601561The ``* `` (multiplication) operator yields the product of its arguments. The
14611562arguments must either both be numbers, or one argument must be an integer and
1462- the other must be a sequence. In the former case, the numbers are converted to a
1463- common real type and then multiplied together. In the latter case, sequence
1464- repetition is performed; a negative repetition factor yields an empty sequence.
1563+ the other must be a sequence. In the former case, the numbers are
1564+ :ref: `converted to a common real type <stdtypes-mixed-arithmetic >` and then
1565+ multiplied together. In the latter case, sequence repetition is performed;
1566+ a negative repetition factor yields an empty sequence.
14651567
14661568This operation can be customized using the special :meth: `~object.__mul__ ` and
14671569:meth: `~object.__rmul__ ` methods.
@@ -1489,7 +1591,8 @@ This operation can be customized using the special :meth:`~object.__matmul__` an
14891591 pair: operator; //
14901592
14911593The ``/ `` (division) and ``// `` (floor division) operators yield the quotient of
1492- their arguments. The numeric arguments are first converted to a common type.
1594+ their arguments. The numeric arguments are first
1595+ :ref: `converted to a common type <stdtypes-mixed-arithmetic >`.
14931596Division of integers yields a float, while floor division of integers results in an
14941597integer; the result is that of mathematical division with the 'floor' function
14951598applied to the result. Division by zero raises the :exc: `ZeroDivisionError `
@@ -1505,8 +1608,9 @@ The floor division operation can be customized using the special
15051608 pair: operator; % (percent)
15061609
15071610The ``% `` (modulo) operator yields the remainder from the division of the first
1508- argument by the second. The numeric arguments are first converted to a common
1509- type. A zero right argument raises the :exc: `ZeroDivisionError ` exception. The
1611+ argument by the second. The numeric arguments are first
1612+ :ref: `converted to a common type <stdtypes-mixed-arithmetic >`.
1613+ A zero right argument raises the :exc: `ZeroDivisionError ` exception. The
15101614arguments may be floating-point numbers, e.g., ``3.14%0.7 `` equals ``0.34 ``
15111615(since ``3.14 `` equals ``4*0.7 + 0.34 ``.) The modulo operator always yields a
15121616result with the same sign as its second operand (or zero); the absolute value of
@@ -1537,7 +1641,9 @@ floating-point number using the :func:`abs` function if appropriate.
15371641
15381642The ``+ `` (addition) operator yields the sum of its arguments. The arguments
15391643must either both be numbers or both be sequences of the same type. In the
1540- former case, the numbers are converted to a common real type and then added together.
1644+ former case, the numbers are
1645+ :ref: `converted to a common real type <stdtypes-mixed-arithmetic >` and then
1646+ added together.
15411647In the latter case, the sequences are concatenated.
15421648
15431649This operation can be customized using the special :meth: `~object.__add__ ` and
@@ -1552,8 +1658,9 @@ This operation can be customized using the special :meth:`~object.__add__` and
15521658 single: operator; - (minus)
15531659 single: - (minus); binary operator
15541660
1555- The ``- `` (subtraction) operator yields the difference of its arguments. The
1556- numeric arguments are first converted to a common real type.
1661+ The ``- `` (subtraction) operator yields the difference of its arguments.
1662+ The numeric arguments are first
1663+ :ref: `converted to a common real type <stdtypes-mixed-arithmetic >`.
15571664
15581665This operation can be customized using the special :meth: `~object.__sub__ ` and
15591666:meth: `~object.__rsub__ ` methods.
0 commit comments