\chapter{Expressions and conditions}
\index{expression}
\index{condition}

{\bf Note:} In this and the following chapters, extended BNF notation
will be used to describe syntax, not lexical analysis.
\index{BNF}

This chapter explains the meaning of the elements of expressions and
conditions.  Conditions are a superset of expressions, and a condition
may be used wherever an expression is required by enclosing it in
parentheses.  The only places where expressions are used in the syntax
instead of conditions is in expression statements and on the
right-hand side of assignment statements; this catches some nasty bugs
like accidentally writing \verb\x == 1\ instead of \verb\x = 1\.
\indexii{assignment}{statement}

The comma plays several roles in Python's syntax.  It is usually an
operator with a lower precedence than all others, but occasionally
serves other purposes as well; e.g. it separates function arguments,
is used in list and dictionary constructors, and has special semantics
in \verb\print\ statements.
\index{comma}

When (one alternative of) a syntax rule has the form

\begin{verbatim}
name:           othername
\end{verbatim}

and no semantics are given, the semantics of this form of \verb\name\
are the same as for \verb\othername\.
\index{syntax}

\section{Arithmetic conversions}
\indexii{arithmetic}{conversion}

When a description of an arithmetic operator below uses the phrase
``the numeric arguments are converted to a common type'',
this both means that if either argument is not a number, a
\verb\TypeError\ exception is raised, and that otherwise
the following conversions are applied:
\exindex{TypeError}
\indexii{floating point}{number}
\indexii{long}{integer}
\indexii{plain}{integer}

\begin{itemize}
\item	first, if either argument is a floating point number,
	the other is converted to floating point;
\item	else, if either argument is a long integer,
	the other is converted to long integer;
\item	otherwise, both must be plain integers and no conversion
	is necessary.
\end{itemize}

\section{Atoms}
\index{atom}

Atoms are the most basic elements of expressions.  Forms enclosed in
reverse quotes or in parentheses, brackets or braces are also
categorized syntactically as atoms.  The syntax for atoms is:

\begin{verbatim}
atom:           identifier | literal | enclosure
enclosure:      parenth_form | list_display | dict_display | string_conversion
\end{verbatim}

\subsection{Identifiers (Names)}
\index{name}
\index{identifier}

An identifier occurring as an atom is a reference to a local, global
or built-in name binding.  If a name can be assigned to anywhere in a
code block, and is not mentioned in a \verb\global\ statement in that
code block, it refers to a local name throughout that code block.
Otherwise, it refers to a global name if one exists, else to a
built-in name.
\indexii{name}{binding}
\index{code block}
\stindex{global}
\indexii{built-in}{name}
\indexii{global}{name}

When the name is bound to an object, evaluation of the atom yields
that object.  When a name is not bound, an attempt to evaluate it
raises a \verb\NameError\ exception.
\exindex{NameError}

\subsection{Literals}
\index{literal}

Python knows string and numeric literals:

\begin{verbatim}
literal:        stringliteral | integer | longinteger | floatnumber
\end{verbatim}

Evaluation of a literal yields an object of the given type (string,
integer, long integer, floating point number) with the given value.
The value may be approximated in the case of floating point literals.
See section \ref{literals} for details.

All literals correspond to immutable data types, and hence the
object's identity is less important than its value.  Multiple
evaluations of literals with the same value (either the same
occurrence in the program text or a different occurrence) may obtain
the same object or a different object with the same value.
\indexiii{immutable}{data}{type}

(In the original implementation, all literals in the same code block
with the same type and value yield the same object.)

\subsection{Parenthesized forms}
\index{parenthesized form}

A parenthesized form is an optional condition list enclosed in
parentheses:

\begin{verbatim}
parenth_form:      "(" [condition_list] ")"
\end{verbatim}

A parenthesized condition list yields whatever that condition list
yields.

An empty pair of parentheses yields an empty tuple object.  Since
tuples are immutable, the rules for literals apply here.
\indexii{empty}{tuple}

(Note that tuples are not formed by the parentheses, but rather by use
of the comma operator.  The exception is the empty tuple, for which
parentheses {\em are} required --- allowing unparenthesized ``nothing''
in expressions would causes ambiguities and allow common typos to
pass uncaught.)
\index{comma}
\indexii{tuple}{display}

\subsection{List displays}
\indexii{list}{display}

A list display is a possibly empty series of conditions enclosed in
square brackets:

\begin{verbatim}
list_display:   "[" [condition_list] "]"
\end{verbatim}

A list display yields a new list object.
\obindex{list}

If it has no condition list, the list object has no items.  Otherwise,
the elements of the condition list are evaluated from left to right
and inserted in the list object in that order.
\indexii{empty}{list}

\subsection{Dictionary displays} \label{dict}
\indexii{dictionary}{display}

A dictionary display is a possibly empty series of key/datum pairs
enclosed in curly braces:
\index{key}
\index{datum}
\index{key/datum pair}

\begin{verbatim}
dict_display:   "{" [key_datum_list] "}"
key_datum_list: key_datum ("," key_datum)* [","]
key_datum:      condition ":" condition
\end{verbatim}

A dictionary display yields a new dictionary object.
\obindex{dictionary}

The key/datum pairs are evaluated from left to right to define the
entries of the dictionary: each key object is used as a key into the
dictionary to store the corresponding datum.

Keys must be strings, otherwise a \verb\TypeError\ exception is
raised.  Clashes between duplicate keys are not detected; the last
datum (textually rightmost in the display) stored for a given key
value prevails.
\exindex{TypeError}

\subsection{String conversions}
\indexii{string}{conversion}

A string conversion is a condition list enclosed in reverse (or
backward) quotes:

\begin{verbatim}
string_conversion: "`" condition_list "`"
\end{verbatim}

A string conversion evaluates the contained condition list and
converts the resulting object into a string according to rules
specific to its type.

If the object is a string, a number, \verb\None\, or a tuple, list or
dictionary containing only objects whose type is one of these, the
resulting string is a valid Python expression which can be passed to
the built-in function \verb\eval()\ to yield an expression with the
same value (or an approximation, if floating point numbers are
involved).

(In particular, converting a string adds quotes around it and converts
``funny'' characters to escape sequences that are safe to print.)

It is illegal to attempt to convert recursive objects (e.g. lists or
dictionaries that contain a reference to themselves, directly or
indirectly.)
\obindex{recursive}

\section{Primaries} \label{primaries}
\index{primary}

Primaries represent the most tightly bound operations of the language.
Their syntax is:

\begin{verbatim}
primary:        atom | attributeref | subscription | slicing | call
\end{verbatim}

\subsection{Attribute references}
\indexii{attribute}{reference}

An attribute reference is a primary followed by a period and a name:

\begin{verbatim}
attributeref:   primary "." identifier
\end{verbatim}

The primary must evaluate to an object of a type that supports
attribute references, e.g. a module or a list.  This object is then
asked to produce the attribute whose name is the identifier.  If this
attribute is not available, the exception \verb\AttributeError\ is
raised.  Otherwise, the type and value of the object produced is
determined by the object.  Multiple evaluations of the same attribute
reference may yield different objects.
\obindex{module}
\obindex{list}

\subsection{Subscriptions}
\index{subscription}

A subscription selects an item of a sequence (string, tuple or list)
or mapping (dictionary) object:
\obindex{sequence}
\obindex{mapping}
\obindex{string}
\obindex{tuple}
\obindex{list}
\obindex{dictionary}
\indexii{sequence}{item}

\begin{verbatim}
subscription:   primary "[" condition "]"
\end{verbatim}

The primary must evaluate to an object of a sequence or mapping type.

If it is a mapping, the condition must evaluate to an object whose
value is one of the keys of the mapping, and the subscription selects
the value in the mapping that corresponds to that key.

If it is a sequence, the condition must evaluate to a plain integer.
If this value is negative, the length of the sequence is added to it
(so that, e.g. \verb\x[-1]\ selects the last item of \verb\x\.)
The resulting value must be a nonnegative integer smaller than the
number of items in the sequence, and the subscription selects the item
whose index is that value (counting from zero).

A string's items are characters.  A character is not a separate data
type but a string of exactly one character.
\index{character}
\indexii{string}{item}

\subsection{Slicings}
\index{slicing}
\index{slice}

A slicing (or slice) selects a range of items in a sequence (string,
tuple or list) object:
\obindex{sequence}
\obindex{string}
\obindex{tuple}
\obindex{list}

\begin{verbatim}
slicing:        primary "[" [condition] ":" [condition] "]"
\end{verbatim}

The primary must evaluate to a sequence object.  The lower and upper
bound expressions, if present, must evaluate to plain integers;
defaults are zero and the sequence's length, respectively.  If either
bound is negative, the sequence's length is added to it.  The slicing
now selects all items with index $k$ such that $i <= k < j$ where $i$
and $j$ are the specified lower and upper bounds.  This may be an
empty sequence.  It is not an error if $i$ or $j$ lie outside the
range of valid indexes (such items don't exist so they aren't
selected).

\subsection{Calls} \label{calls}
\index{call}

A call calls a callable object (e.g. a function) with a possibly empty
series of arguments:
\obindex{callable}

\begin{verbatim}
call:           primary "(" [condition_list] ")"
\end{verbatim}

The primary must evaluate to a callable object (user-defined
functions, built-in functions, methods of built-in objects, class
objects, and methods of class instances are callable).  If it is a
class, the argument list must be empty; otherwise, the arguments are
evaluated.

A call always returns some value, possibly \verb\None\, unless it
raises an exception.  How this value is computed depends on the type
of the callable object.  If it is:

\begin{description}

\item[a user-defined function:] the code block for the function is
executed, passing it the argument list.  The first thing the code
block will do is bind the formal parameters to the arguments; this is
described in section \ref{function}.  When the code block executes a
\verb\return\ statement, this specifies the return value of the
function call.
\indexii{function}{call}
\indexiii{user-defined}{function}{call}
\obindex{user-defined function}
\obindex{function}

\item[a built-in function or method:] the result is up to the
interpreter; see the library reference manual for the descriptions of
built-in functions and methods.
\indexii{function}{call}
\indexii{built-in function}{call}
\indexii{method}{call}
\indexii{built-in method}{call}
\obindex{built-in method}
\obindex{built-in function}
\obindex{method}
\obindex{function}

\item[a class object:] a new instance of that class is returned.
\obindex{class}
\indexii{class object}{call}

\item[a class instance method:] the corresponding user-defined
function is called, with an argument list that is one longer than the
argument list of the call: the instance becomes the first argument.
\obindex{class instance}
\obindex{instance}
\indexii{instance}{call}
\indexii{class instance}{call}

\end{description}

\section{Unary arithmetic operations}
\indexiii{unary}{arithmetic}{operation}
\indexiii{unary}{bit-wise}{operation}

All unary arithmetic (and bit-wise) operations have the same priority:

\begin{verbatim}
u_expr:         primary | "-" u_expr | "+" u_expr | "~" u_expr
\end{verbatim}

The unary \verb\"-"\ (minus) operator yields the negation of its
numeric argument.
\index{negation}
\index{minus}

The unary \verb\"+"\ (plus) operator yields its numeric argument
unchanged.
\index{plus}

The unary \verb\"~"\ (invert) operator yields the bit-wise inversion
of its plain or long integer argument.  The bit-wise inversion of
\verb\x\ is defined as \verb\-(x+1)\.
\index{inversion}

In all three cases, if the argument does not have the proper type,
a \verb\TypeError\ exception is raised.
\exindex{TypeError}

\section{Binary arithmetic operations}
\indexiii{binary}{arithmetic}{operation}

The binary arithmetic operations have the conventional priority
levels.  Note that some of these operations also apply to certain
non-numeric types.  There is no ``power'' operator, so there are only
two levels, one for multiplicative operators and one for additive
operators:

\begin{verbatim}
m_expr:         u_expr | m_expr "*" u_expr
              | m_expr "/" u_expr | m_expr "%" u_expr
a_expr:         m_expr | aexpr "+" m_expr | aexpr "-" m_expr
\end{verbatim}

The \verb\"*"\ (multiplication) operator yields the product of its
arguments.  The arguments must either both be numbers, or one argument
must be a plain integer and the other must be a sequence.  In the
former case, the numbers are converted to a common type and then
multiplied together.  In the latter case, sequence repetition is
performed; a negative repetition factor yields an empty sequence.
\index{multiplication}

The \verb\"/"\ (division) operator yields the quotient of its
arguments.  The numeric arguments are first converted to a common
type.  Plain or long integer division yields an integer of the same
type; the result is that of mathematical division with the `floor'
function applied to the result.  Division by zero raises the
\verb\ZeroDivisionError\ exception.
\exindex{ZeroDivisionError}
\index{division}

The \verb\"%"\ (modulo) operator yields the remainder from the
division of the first argument by the second.  The numeric arguments
are first converted to a common type.  A zero right argument raises
the \verb\ZeroDivisionError\ exception.  The arguments may be floating
point numbers, e.g. \verb\3.14 % 0.7\ equals \verb\0.34\.  The modulo
operator always yields a result with the same sign as its second
operand (or zero); the absolute value of the result is strictly
smaller than the second operand.
\index{modulo}

The integer division and modulo operators are connected by the
following identity: \verb\x == (x/y)*y + (x%y)\.  Integer division and
modulo are also connected with the built-in function \verb\divmod()\:
\verb\divmod(x, y) == (x/y, x%y)\.  These identities don't hold for
floating point numbers; there a similar identity holds where
\verb\x/y\ is replaced by \verb\floor(x/y)\).

The \verb\"+"\ (addition) operator yields the sum of its arguments.
The arguments must either both be numbers, or both sequences of the
same type.  In the former case, the numbers are converted to a common
type and then added together.  In the latter case, the sequences are
concatenated.
\index{addition}

The \verb\"-"\ (subtraction) operator yields the difference of its
arguments.  The numeric arguments are first converted to a common
type.
\index{subtraction}

\section{Shifting operations}
\indexii{shifting}{operation}

The shifting operations have lower priority than the arithmetic
operations:

\begin{verbatim}
shift_expr:     a_expr | shift_expr ( "<<" | ">>" ) a_expr
\end{verbatim}

These operators accept plain or long integers as arguments.  The
arguments are converted to a common type.  They shift the first
argument to the left or right by the number of bits given by the
second argument.

A right shift by $n$ bits is defined as division by $2^n$.  A left
shift by $n$ bits is defined as multiplication with $2^n$; for plain
integers there is no overflow check so this drops bits and flip the
sign if the result is not less than $2^{31}$ in absolute value.

Negative shift counts raise a \verb\ValueError\ exception.
\exindex{ValueError}

\section{Binary bit-wise operations}
\indexiii{binary}{bit-wise}{operation}

Each of the three bitwise operations has a different priority level:

\begin{verbatim}
and_expr:       shift_expr | and_expr "&" shift_expr
xor_expr:       and_expr | xor_expr "^" and_expr
or_expr:       xor_expr | or_expr "|" xor_expr
\end{verbatim}

The \verb\"&"\ operator yields the bitwise AND of its arguments, which
must be plain or long integers.  The arguments are converted to a
common type.
\indexii{bit-wise}{and}

The \verb\"^"\ operator yields the bitwise XOR (exclusive OR) of its
arguments, which must be plain or long integers.  The arguments are
converted to a common type.
\indexii{bit-wise}{xor}
\indexii{exclusive}{or}

The \verb\"|"\ operator yields the bitwise (inclusive) OR of its
arguments, which must be plain or long integers.  The arguments are
converted to a common type.
\indexii{bit-wise}{or}
\indexii{inclusive}{or}

\section{Comparisons}
\index{comparison}

Contrary to C, all comparison operations in Python have the same
priority, which is lower than that of any arithmetic, shifting or
bitwise operation.  Also contrary to C, expressions like
\verb\a < b < c\ have the interpretation that is conventional in
mathematics:
\index{C}

\begin{verbatim}
comparison:     or_expr (comp_operator or_expr)*
comp_operator:  "<"|">"|"=="|">="|"<="|"<>"|"!="|"is" ["not"]|["not"] "in"
\end{verbatim}

Comparisons yield integer values: 1 for true, 0 for false.

Comparisons can be chained arbitrarily, e.g. $x < y <= z$ is
equivalent to $x < y$ \verb\and\ $y <= z$, except that $y$ is
evaluated only once (but in both cases $z$ is not evaluated at all
when $x < y$ is found to be false).
\indexii{chaining}{comparisons}

\catcode`\_=8
Formally, $e_0 op_1 e_1 op_2 e_2 ...e_{n-1} op_n e_n$ is equivalent to
$e_0 op_1 e_1$ \verb\and\ $e_1 op_2 e_2$ \verb\and\ ... \verb\and\
$e_{n-1} op_n e_n$, except that each expression is evaluated at most once.

Note that $e_0 op_1 e_1 op_2 e_2$ does not imply any kind of comparison
between $e_0$ and $e_2$, e.g. $x < y > z$ is perfectly legal.
\catcode`\_=12

The forms \verb\<>\ and \verb\!=\ are equivalent; for consistency with
C, \verb\!=\ is preferred; where \verb\!=\ is mentioned below
\verb\<>\ is also implied.

The operators {\tt "<", ">", "==", ">=", "<="}, and {\tt "!="} compare
the values of two objects.  The objects needn't have the same type.
If both are numbers, they are coverted to a common type.  Otherwise,
objects of different types {\em always} compare unequal, and are
ordered consistently but arbitrarily.

(This unusual definition of comparison is done to simplify the
definition of operations like sorting and the \verb\in\ and \verb\not
in\ operators.)

Comparison of objects of the same type depends on the type:

\begin{itemize}

\item
Numbers are compared arithmetically.

\item
Strings are compared lexicographically using the numeric equivalents
(the result of the built-in function \verb\ord\) of their characters.

\item
Tuples and lists are compared lexicographically using comparison of
corresponding items.

\item
Mappings (dictionaries) are compared through lexicographic
comparison of their sorted (key, value) lists.%
\footnote{This is expensive since it requires sorting the keys first,
but about the only sensible definition.  It was tried to compare
dictionaries by identity only, but this caused surprises because
people expected to be able to test a dictionary for emptiness by
comparing it to {\tt \{\}}.}

\item
Most other types compare unequal unless they are the same object;
the choice whether one object is considered smaller or larger than
another one is made arbitrarily but consistently within one
execution of a program.

\end{itemize}

The operators \verb\in\ and \verb\not in\ test for sequence
membership: if $y$ is a sequence, $x ~\verb\in\~ y$ is true if and
only if there exists an index $i$ such that $x = y[i]$.
$x ~\verb\not in\~ y$ yields the inverse truth value.  The exception
\verb\TypeError\ is raised when $y$ is not a sequence, or when $y$ is
a string and $x$ is not a string of length one.%
\footnote{The latter restriction is sometimes a nuisance.}
\opindex{in}
\opindex{not in}
\indexii{membership}{test}
\obindex{sequence}

The operators \verb\is\ and \verb\is not\ test for object identity:
$x ~\verb\is\~ y$ is true if and only if $x$ and $y$ are the same
object.  $x ~\verb\is not\~ y$ yields the inverse truth value.
\opindex{is}
\opindex{is not}
\indexii{identity}{test}

\section{Boolean operations} \label{Booleans}
\indexii{Boolean}{operation}

Boolean operations have the lowest priority of all Python operations:

\begin{verbatim}
condition:      or_test
or_test:        and_test | or_test "or" and_test
and_test:       not_test | and_test "and" not_test
not_test:       comparison | "not" not_test
\end{verbatim}

In the context of Boolean operations, and also when conditions are
used by control flow statements, the following values are interpreted
as false: \verb\None\, numeric zero of all types, empty sequences
(strings, tuples and lists), and empty mappings (dictionaries).  All
other values are interpreted as true.

The operator \verb\not\ yields 1 if its argument is false, 0 otherwise.
\opindex{not}

The condition $x ~\verb\and\~ y$ first evaluates $x$; if $x$ is false,
its value is returned; otherwise, $y$ is evaluated and the resulting
value is returned.
\opindex{and}

The condition $x ~\verb\or\~ y$ first evaluates $x$; if $x$ is true,
its value is returned; otherwise, $y$ is evaluated and the resulting
value is returned.
\opindex{or}

(Note that \verb\and\ and \verb\or\ do not restrict the value and type
they return to 0 and 1, but rather return the last evaluated argument.
This is sometimes useful, e.g. if \verb\s\ is a string that should be
replaced by a default value if it is empty, the expression
\verb\s or 'foo'\ yields the desired value.  Because \verb\not\ has to
invent a value anyway, it does not bother to return a value of the
same type as its argument, so e.g. \verb\not 'foo'\ yields \verb\0\,
not \verb\''\.)

\section{Expression lists and condition lists}
\indexii{expression}{list}
\indexii{condition}{list}

\begin{verbatim}
expr_list:      or_expr ("," or_expr)* [","]
cond_list:      condition ("," condition)* [","]
\end{verbatim}

The only difference between expression lists and condition lists is
the lowest priority of operators that can be used in them without
being enclosed in parentheses; condition lists allow all operators,
while expression lists don't allow comparisons and Boolean operators
(they do allow bitwise and shift operators though).

Expression lists are used in expression statements and assignments;
condition lists are used everywhere else where a list of
comma-separated values is required.

An expression (condition) list containing at least one comma yields a
tuple.  The length of the tuple is the number of expressions
(conditions) in the list.  The expressions (conditions) are evaluated
from left to right.  (Conditions lists are used syntactically is a few
places where no tuple is constructed but a list of values is needed
nevertheless.)
\obindex{tuple}

The trailing comma is required only to create a single tuple (a.k.a. a
{\em singleton}); it is optional in all other cases.  A single
expression (condition) without a trailing comma doesn't create a
tuple, but rather yields the value of that expression (condition).
\indexii{trailing}{comma}

(To create an empty tuple, use an empty pair of parentheses:
\verb\()\.)
