\chapter{Expressions\label{expressions}}
\index{expression}

This chapter explains the meaning of the elements of expressions in
Python.

\strong{Syntax Notes:} In this and the following chapters, extended
BNF\index{BNF} notation will be used to describe syntax, not lexical
analysis.  When (one alternative of) a syntax rule has the form

\begin{productionlist}[*]
  \production{name}{\token{othername}}
\end{productionlist}

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


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

When a description of an arithmetic operator below uses the phrase
``the numeric arguments are converted to a common type,'' the
arguments are coerced using the coercion rules listed at the end of
chapter \ref{datamodel}.  If both arguments are standard numeric
types, the following coercions are applied:

\begin{itemize}
\item	If either argument is a complex number, the other is converted
	to complex;
\item	otherwise, if either argument is a floating point number,
	the other is converted to floating point;
\item	otherwise, 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}

Some additional rules apply for certain operators (e.g., a string left
argument to the `\%' operator). Extensions can define their own
coercions.


\section{Atoms\label{atoms}}
\index{atom}

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

\begin{productionlist}
  \production{atom}
             {\token{identifier} | \token{literal} | \token{enclosure}}
  \production{enclosure}
             {\token{parenth_form} | \token{list_display}
              | \token{dict_display} | \token{string_conversion}}
\end{productionlist}


\subsection{Identifiers (Names)\label{atom-identifiers}}
\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 is assigned to anywhere in a code
block (even in unreachable code), and is not mentioned in a
\keyword{global} statement in that code block, then it refers to a local
name throughout that code block.  When it is not assigned to anywhere
in the block, or when it is assigned to but also explicitly listed in
a \keyword{global} statement, it refers to a global name if one exists,
else to a built-in name (and this binding may dynamically
change).\footnote{The Python interpreter provides a useful set of
  predefined built-in functions.  It is not recommended to reuse
  (hide) these names with self defined objects.  See the
  \citetitle[../lib/built-in-funcs.html]{Python Library Reference} for
  the descriptions of built-in functions and methods.}
\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 \exception{NameError} exception.
\exindex{NameError}

\strong{Private name mangling:}%
\indexii{name}{mangling}%
\indexii{private}{names}%
when an identifier that textually occurs in a class definition begins
with two or more underscore characters and does not end in two or more
underscores, it is considered a \dfn{private name} of that class.
Private names are transformed to a longer form before code is
generated for them.  The transformation inserts the class name in
front of the name, with leading underscores removed, and a single
underscore inserted in front of the class name.  For example, the
identifier \code{__spam} occurring in a class named \code{Ham} will be
transformed to \code{_Ham__spam}.  This transformation is independent
of the syntactical context in which the identifier is used.  If the
transformed name is extremely long (longer than 255 characters),
implementation defined truncation may happen.  If the class name
consists only of underscores, no transformation is done.


\subsection{Literals\label{atom-literals}}
\index{literal}

Python supports string literals and various numeric literals:

\begin{productionlist}
  \production{literal}
             {\token{stringliteral} | \token{integer}
              | \token{longinteger} | \token{floatnumber}
              | \token{imagnumber}}
\end{productionlist}

Evaluation of a literal yields an object of the given type (string,
integer, long integer, floating point number, complex number) with the
given value.  The value may be approximated in the case of floating
point and imaginary (complex) 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}
\indexii{immutable}{object}


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

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

\begin{productionlist}
  \production{parenth_form}
             {"(" [\token{expression_list}] ")"}
\end{productionlist}

A parenthesized expression list yields whatever that expression list
yields: if the list contains at least one comma, it yields a tuple;
otherwise, it yields the single expression that makes up the
expression list.

An empty pair of parentheses yields an empty tuple object.  Since
tuples are immutable, the rules for literals apply (i.e., two
occurrences of the empty tuple may or may not yield the same object).
\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 \emph{are} required --- allowing unparenthesized ``nothing''
in expressions would cause ambiguities and allow common typos to
pass uncaught.
\index{comma}
\indexii{tuple}{display}


\subsection{List displays\label{lists}}
\indexii{list}{display}
\indexii{list}{comprehensions}

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

\begin{productionlist}
  \production{list_display}
             {"[" [\token{listmaker}] "]"}
  \production{listmaker}
             {\token{expression} ( \token{list_for}
              | ( "," \token{expression})* [","] )}
  \production{list_iter}
             {\token{list_for} | \token{list_if}}
  \production{list_for}
             {"for" \token{expression_list} "in" \token{testlist}
              [\token{list_iter}]}
  \production{list_if}
             {"if" \token{test} [\token{list_iter}]}
\end{productionlist}

A list display yields a new list object.  Its contents are specified
by providing either a list of expressions or a list comprehension.
\indexii{list}{comprehensions}
When a comma-separated list of expressions is supplied, its elements are
evaluated from left to right and placed into the list object in that
order.  When a list comprehension is supplied, it consists of a
single expression followed by at least one \keyword{for} clause and zero or
more \keyword{for} or \keyword{if} clauses.  In this
case, the elements of the new list are those that would be produced
by considering each of the \keyword{for} or \keyword{if} clauses a block,
nesting from
left to right, and evaluating the expression to produce a list element
each time the innermost block is reached.
\obindex{list}
\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{productionlist}
  \production{dict_display}
             {"{" [\token{key_datum_list}] "}"}
  \production{key_datum_list}
             {\token{key_datum} ("," \token{key_datum})* [","]}
  \production{key_datum}
             {\token{expression} ":" \token{expression}}
\end{productionlist}

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.

Restrictions on the types of the key values are listed earlier in
section \ref{types}.  (To summarize,the key type should be hashable,
which excludes all mutable objects.)  Clashes between duplicate keys
are not detected; the last datum (textually rightmost in the display)
stored for a given key value prevails.
\indexii{immutable}{object}


\subsection{String conversions\label{string-conversions}}
\indexii{string}{conversion}
\indexii{reverse}{quotes}
\indexii{backward}{quotes}
\index{back-quotes}

A string conversion is an expression list enclosed in reverse (a.k.a.
backward) quotes:

\begin{productionlist}
  \production{string_conversion}
             {"`" \token{expression_list} "`"}
\end{productionlist}

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

If the object is a string, a number, \code{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 \function{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}

The built-in function \function{repr()} performs exactly the same
conversion in its argument as enclosing it in parentheses and reverse
quotes does.  The built-in function \function{str()} performs a
similar but more user-friendly conversion.
\bifuncindex{repr}
\bifuncindex{str}


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

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

\begin{productionlist}
  \production{primary}
             {\token{atom} | \token{attributeref}
              | \token{subscription} | \token{slicing} | \token{call}}
\end{productionlist}


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

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

\begin{productionlist}
  \production{attributeref}
             {\token{primary} "." \token{identifier}}
\end{productionlist}

The primary must evaluate to an object of a type that supports
attribute references, e.g., a module, list, or an instance.  This
object is then asked to produce the attribute whose name is the
identifier.  If this attribute is not available, the exception
\exception{AttributeError}\exindex{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\label{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{productionlist}
  \production{subscription}
             {\token{primary} "[" \token{expression_list} "]"}
\end{productionlist}

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

If the primary is a mapping, the expression list 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.  (The expression list is a tuple except if it has exactly one
item.)

If the primary is a sequence, the expression (list) must evaluate to a
plain integer.  If this value is negative, the length of the sequence
is added to it (so that, e.g., \code{x[-1]} selects the last item of
\code{x}.)  The resulting value must be a nonnegative integer less
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\label{slicings}}
\index{slicing}
\index{slice}

A slicing selects a range of items in a sequence object (e.g., a
string, tuple or list).  Slicings may be used as expressions or as
targets in assignment or del statements.  The syntax for a slicing:
\obindex{sequence}
\obindex{string}
\obindex{tuple}
\obindex{list}

\begin{productionlist}
  \production{slicing}
             {\token{simple_slicing} | \token{extended_slicing}}
  \production{simple_slicing}
             {\token{primary} "[" \token{short_slice} "]"}
  \production{extended_slicing}
             {\token{primary} "[" \token{slice_list} "]" }
  \production{slice_list}
             {\token{slice_item} ("," \token{slice_item})* [","]}
  \production{slice_item}
             {\token{expression} | \token{proper_slice} | \token{ellipsis}}
  \production{proper_slice}
             {\token{short_slice} | \token{long_slice}}
  \production{short_slice}
             {[\token{lower_bound}] ":" [\token{upper_bound}]}
  \production{long_slice}
             {\token{short_slice} ":" [\token{stride}]}
  \production{lower_bound}
             {\token{expression}}
  \production{upper_bound}
             {\token{expression}}
  \production{stride}
             {\token{expression}}
  \production{ellipsis}
             {"..."}
\end{productionlist}

There is ambiguity in the formal syntax here: anything that looks like
an expression list also looks like a slice list, so any subscription
can be interpreted as a slicing.  Rather than further complicating the
syntax, this is disambiguated by defining that in this case the
interpretation as a subscription takes priority over the
interpretation as a slicing (this is the case if the slice list
contains no proper slice nor ellipses).  Similarly, when the slice
list has exactly one short slice and no trailing comma, the
interpretation as a simple slicing takes priority over that as an
extended slicing.\indexii{extended}{slicing}

The semantics for a simple slicing are as follows.  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
\code{sys.maxint}, respectively.  If either bound is negative, the
sequence's length is added to it.  The slicing now selects all items
with index \var{k} such that
\code{\var{i} <= \var{k} < \var{j}} where \var{i}
and \var{j} are the specified lower and upper bounds.  This may be an
empty sequence.  It is not an error if \var{i} or \var{j} lie outside the
range of valid indexes (such items don't exist so they aren't
selected).

The semantics for an extended slicing are as follows.  The primary
must evaluate to a mapping object, and it is indexed with a key that
is constructed from the slice list, as follows.  If the slice list
contains at least one comma, the key is a tuple containing the
conversion of the slice items; otherwise, the conversion of the lone
slice item is the key.  The conversion of a slice item that is an
expression is that expression.  The conversion of an ellipsis slice
item is the built-in \code{Ellipsis} object.  The conversion of a
proper slice is a slice object (see section \ref{types}) whose
\member{start}, \member{stop} and \member{step} attributes are the
values of the expressions given as lower bound, upper bound and
stride, respectively, substituting \code{None} for missing
expressions.
\withsubitem{(slice object attribute)}{\ttindex{start}
  \ttindex{stop}\ttindex{step}}


\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{productionlist}
  \production{call}
             {\token{primary} "(" [\token{argument_list} [","]] ")"}
  \production{argument_list}
             {\token{positional_arguments} ["," \token{keyword_arguments}]
              | \token{keyword_arguments}}
  \production{positional_arguments}
             {\token{expression} ("," \token{expression})*}
  \production{keyword_arguments}
             {\token{keyword_item} ("," \token{keyword_item})*}
  \production{keyword_item}
             {\token{identifier} "=" \token{expression}}
\end{productionlist}

A trailing comma may be present after an argument list but does not
affect the semantics.

The primary must evaluate to a callable object (user-defined
functions, built-in functions, methods of built-in objects, class
objects, methods of class instances, and certain class instances
themselves are callable; extensions may define additional callable
object types).  All argument expressions are evaluated before the call
is attempted.  Please refer to section \ref{function} for the syntax
of formal parameter lists.

If keyword arguments are present, they are first converted to
positional arguments, as follows.  First, a list of unfilled slots is
created for the formal parameters.  If there are N positional
arguments, they are placed in the first N slots.  Next, for each
keyword argument, the identifier is used to determine the
corresponding slot (if the identifier is the same as the first formal
parameter name, the first slot is used, and so on).  If the slot is
already filled, a \exception{TypeError} exception is raised.
Otherwise, the value of the argument is placed in the slot, filling it
(even if the expression is \code{None}, it fills the slot).  When all
arguments have been processed, the slots that are still unfilled are
filled with the corresponding default value from the function
definition.  (Default values are calculated, once, when the function
is defined; thus, a mutable object such as a list or dictionary used
as default value will be shared by all calls that don't specify an
argument value for the corresponding slot; this should usually be
avoided.)  If there are any unfilled slots for which no default value
is specified, a \exception{TypeError} exception is raised.  Otherwise,
the list of filled slots is used as the argument list for the call.

If there are more positional arguments than there are formal parameter
slots, a \exception{TypeError} exception is raised, unless a formal
parameter using the syntax \samp{*identifier} is present; in this
case, that formal parameter receives a tuple containing the excess
positional arguments (or an empty tuple if there were no excess
positional arguments).

If any keyword argument does not correspond to a formal parameter
name, a \exception{TypeError} exception is raised, unless a formal
parameter using the syntax \samp{**identifier} is present; in this
case, that formal parameter receives a dictionary containing the
excess keyword arguments (using the keywords as keys and the argument
values as corresponding values), or a (new) empty dictionary if there
were no excess keyword arguments.

Formal parameters using the syntax \samp{*identifier} or
\samp{**identifier} cannot be used as positional argument slots or
as keyword argument names.  Formal parameters using the syntax
\samp{(sublist)} cannot be used as keyword argument names; the
outermost sublist corresponds to a single unnamed argument slot, and
the argument value is assigned to the sublist using the usual tuple
assignment rules after all other parameter processing is done.

A call always returns some value, possibly \code{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
\keyword{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 \citetitle[../lib/built-in-funcs.html]{Python
Library Reference} 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{class instance}{call}

\item[a class instance:] The class must define a \method{__call__()}
method; the effect is then the same as if that method was called.
\indexii{instance}{call}
\withsubitem{(object method)}{\ttindex{__call__()}}

\end{description}


\section{The power operator\label{power}}

The power operator binds more tightly than unary operators on its
left; it binds less tightly than unary operators on its right.  The
syntax is:

\begin{productionlist}
  \production{power}
             {\token{primary} ["**" \token{u_expr}]}
\end{productionlist}

Thus, in an unparenthesized sequence of power and unary operators, the
operators are evaluated from right to left (this does not constrain
the evaluation order for the operands).

The power operator has the same semantics as the built-in
\function{pow()} function, when called with two arguments: it yields
its left argument raised to the power of its right argument.  The
numeric arguments are first converted to a common type.  The result
type is that of the arguments after coercion; if the result is not
expressible in that type (as in raising an integer to a negative
power, or a negative floating point number to a broken power), a
\exception{TypeError} exception is raised.


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

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

\begin{productionlist}
  \production{u_expr}
             {\token{power} | "-" \token{u_expr}
              | "+" \token{u_expr} | "~" \token{u_expr}}
\end{productionlist}

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

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

The unary \code{\~} (invert) operator yields the bit-wise inversion
of its plain or long integer argument.  The bit-wise inversion of
\code{x} is defined as \code{-(x+1)}.  It only applies to integral
numbers.
\index{inversion}

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


\section{Binary arithmetic operations\label{binary}}
\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.  Apart from the power operator, there are only two
levels, one for multiplicative operators and one for additive
operators:

\begin{productionlist}
  \production{m_expr}
             {\token{u_expr} | \token{m_expr} "*" \token{u_expr}
              | \token{m_expr} "/" \token{u_expr}
              | \token{m_expr} "\%" \token{u_expr}}
  \production{a_expr}
             {\token{m_expr} | \token{aexpr} "+" \token{m_expr}
              \token{aexpr} "-" \token{m_expr}}
\end{productionlist}

The \code{*} (multiplication) operator yields the product of its
arguments.  The arguments must either both be numbers, or one argument
must be an integer (plain or long) 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 \code{/} (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
\exception{ZeroDivisionError} exception.
\exindex{ZeroDivisionError}
\index{division}

The \code{\%} (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 \exception{ZeroDivisionError} exception.  The arguments may be floating
point numbers, e.g., \code{3.14\%0.7} equals \code{0.34} (since
\code{3.14} equals \code{4*0.7 + 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: \code{x == (x/y)*y + (x\%y)}.  Integer division and
modulo are also connected with the built-in function \function{divmod()}:
\code{divmod(x, y) == (x/y, x\%y)}.  These identities don't hold for
floating point and complex numbers; there similar identities hold
approximately where \code{x/y} is replaced by \code{floor(x/y)}) or
\code{floor(x/y) - 1} (for floats),\footnote{
    If x is very close to an exact integer multiple of y, it's
    possible for \code{floor(x/y)} to be one larger than
    \code{(x-x\%y)/y} due to rounding.  In such cases, Python returns
    the latter result, in order to preserve that \code{divmod(x,y)[0]
    * y + x \%{} y} be very close to \code{x}.
} or \code{floor((x/y).real)} (for
complex).

The \code{+} (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 \code{-} (subtraction) operator yields the difference of its
arguments.  The numeric arguments are first converted to a common
type.
\index{subtraction}


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

The shifting operations have lower priority than the arithmetic
operations:

\begin{productionlist}
  \production{shift_expr}
             {\token{a_expr}
              | \token{shift_expr} ( "<<" | ">>" ) \token{a_expr}}
\end{productionlist}

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 \var{n} bits is defined as division by
\code{pow(2,\var{n})}.  A left shift by \var{n} bits is defined as
multiplication with \code{pow(2,\var{n})}; for plain integers there is
no overflow check so in that case the operation drops bits and flips
the sign if the result is not less than \code{pow(2,31)} in absolute
value.  Negative shift counts raise a \exception{ValueError}
exception.
\exindex{ValueError}


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

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

\begin{productionlist}
  \production{and_expr}
             {\token{shift_expr} | \token{and_expr} "\&" \token{shift_expr}}
  \production{xor_expr}
             {\token{and_expr} | \token{xor_expr} "\textasciicircum" \token{and_expr}}
  \production{or_expr}
             {\token{xor_expr} | \token{or_expr} "|" \token{xor_expr}}
\end{productionlist}

The \code{\&} 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 \code{\^} 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 \code{|} 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\label{comparisons}}
\index{comparison}

Unlike C, all comparison operations in Python have the same priority,
which is lower than that of any arithmetic, shifting or bitwise
operation.  Also unlike C, expressions like \code{a < b < c} have the
interpretation that is conventional in mathematics:
\indexii{C}{language}

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

Comparisons yield integer values: \code{1} for true, \code{0} for false.

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

Formally, if \var{a}, \var{b}, \var{c}, \ldots, \var{y}, \var{z} are
expressions and \var{opa}, \var{opb}, \ldots, \var{opy} are comparison
operators, then \var{a opa b opb c} \ldots \var{y opy z} is equivalent
to \var{a opa b} \keyword{and} \var{b opb c} \keyword{and} \ldots
\var{y opy z}, except that each expression is evaluated at most once.

Note that \var{a opa b opb c} doesn't imply any kind of comparison
between \var{a} and \var{c}, so that, e.g., \code{x < y > z} is
perfectly legal (though perhaps not pretty).

The forms \code{<>} and \code{!=} are equivalent; for consistency with
C, \code{!=} is preferred; where \code{!=} is mentioned below
\code{<>} is also accepted.  The \code{<>} spelling is considered
obsolescent.

The operators \code{<}, \code{>}, \code{==}, \code{>=}, \code{<=}, and
\code{!=} compare
the values of two objects.  The objects need not have the same type.
If both are numbers, they are coverted to a common type.  Otherwise,
objects of different types \emph{always} compare unequal, and are
ordered consistently but arbitrarily.

(This unusual definition of comparison was used to simplify the
definition of operations like sorting and the \keyword{in} and
\keyword{not in} operators.  In the future, the comparison rules for
objects of different types are likely to change.)

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 \function{ord()}) of their
characters.  Unicode and 8-bit strings are fully interoperable in this
behavior.

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

\item
Mappings (dictionaries) compare equal if and only if their sorted
(key, value) lists compare equal.\footnote{The implementation computes
   this efficiently, without constructing lists or sorting.}
Outcomes other than equality are resolved consistently, but are not
otherwise defined.\footnote{Earlier versions of Python used
  lexicographic comparison of the sorted (key, value) lists, but this
  was very expensive for the common case of comparing for equality.  An
  even earlier version of Python compared dictionaries by identity only,
  but this caused surprises because people expected to be able to test
  a dictionary for emptiness by comparing it to \code{\{\}}.}

\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 \keyword{in} and \keyword{not in} test for set
membership.  \code{\var{x} in \var{s}} evaluates to true if \var{x}
is a member of the set \var{s}, and false otherwise.  \code{\var{x}
not in \var{s}} returns the negation of \code{\var{x} in \var{s}}.
The set membership test has traditionally been bound to sequences; an
object is a member of a set if the set is a sequence and contains an
element equal to that object.  However, it is possible for an object
to support membership tests without being a sequence.  In particular,
dictionaries support memership testing as a nicer way of spelling
\code{\var{key} in \var{dict}}; other mapping types may follow suit.

For the list and tuple types, \code{\var{x} in \var{y}} is true if and
only if there exists an index \var{i} such that
\code{\var{x} == \var{y}[\var{i}]} is true.

For the Unicode and string types, \code{\var{x} in \var{y}} is true if
and only if there exists an index \var{i} such that \code{\var{x} ==
\var{y}[\var{i}]} is true. If \code{\var{x}} is not a string or
Unicode object of length \code{1}, a \exception{TypeError} exception
is raised.

For user-defined classes which define the \method{__contains__()} method,
\code{\var{x} in \var{y}} is true if and only if
\code{\var{y}.__contains__(\var{x})} is true.

For user-defined classes which do not define \method{__contains__()} and
do define \method{__getitem__()}, \code{\var{x} in \var{y}} is true if
and only if there is a non-negative integer index \var{i} such that
\code{\var{x} == \var{y}[\var{i}]}, and all lower integer indices
do not raise \exception{IndexError} exception. (If any other exception
is raised, it is as if \keyword{in} raised that exception).

The operator \keyword{not in} is defined to have the inverse true value
of \keyword{in}.
\opindex{in}
\opindex{not in}
\indexii{membership}{test}
\obindex{sequence}

The operators \keyword{is} and \keyword{is not} test for object identity:
\code{\var{x} is \var{y}} is true if and only if \var{x} and \var{y}
are the same object.  \code{\var{x} is not \var{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{productionlist}
  \production{expression}
             {\token{or_test} | \token{lambda_form}}
  \production{or_test}
             {\token{and_test} | \token{or_test} "or" \token{and_test}}
  \production{and_test}
             {\token{not_test} | \token{and_test} "and" \token{not_test}}
  \production{not_test}
             {\token{comparison} | "not" \token{not_test}}
  \production{lambda_form}
             {"lambda" [\token{parameter_list}]: \token{expression}}
\end{productionlist}

In the context of Boolean operations, and also when expressions are
used by control flow statements, the following values are interpreted
as false: \code{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 \keyword{not} yields \code{1} if its argument is false,
\code{0} otherwise.
\opindex{not}

The expression \code{\var{x} and \var{y}} first evaluates \var{x}; if
\var{x} is false, its value is returned; otherwise, \var{y} is
evaluated and the resulting value is returned.
\opindex{and}

The expression \code{\var{x} or \var{y}} first evaluates \var{x}; if
\var{x} is true, its value is returned; otherwise, \var{y} is
evaluated and the resulting value is returned.
\opindex{or}

(Note that neither \keyword{and} nor \keyword{or} restrict the value
and type they return to \code{0} and \code{1}, but rather return the
last evaluated argument.
This is sometimes useful, e.g., if \code{s} is a string that should be
replaced by a default value if it is empty, the expression
\code{s or 'foo'} yields the desired value.  Because \keyword{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., \code{not 'foo'} yields \code{0},
not \code{''}.)

Lambda forms (lambda expressions) have the same syntactic position as
expressions.  They are a shorthand to create anonymous functions; the
expression \code{lambda \var{arguments}: \var{expression}}
yields a function object that behaves virtually identical to one
defined with

\begin{verbatim}
def name(arguments):
    return expression
\end{verbatim}

See section \ref{function} for the syntax of parameter lists.  Note
that functions created with lambda forms cannot contain statements.
\label{lambda}
\indexii{lambda}{expression}
\indexii{lambda}{form}
\indexii{anonmymous}{function}

\strong{Programmer's note:} Prior to Python 2.1, a lambda form defined
inside a function has no access to names defined in the function's
namespace.  This is because Python had only two scopes: local and
global.  A common work-around was to use default argument values to
pass selected variables into the lambda's namespace, e.g.:

\begin{verbatim}
def make_incrementor(increment):
    return lambda x, n=increment: x+n
\end{verbatim}

As of Python 2.1, nested scopes were introduced, and this work-around
has not been necessary.  Python 2.1 supports nested scopes in modules
which include the statement \samp{from __future__ import
nested_scopes}, and more recent versions of Python enable nested
scopes by default.  This version works starting with Python 2.1:

\begin{verbatim}
from __future__ import nested_scopes

def make_incrementor(increment):
    return lambda x: x+increment
\end{verbatim}


\section{Expression lists\label{exprlists}}
\indexii{expression}{list}

\begin{productionlist}
  \production{expression_list}
             {\token{expression} ( "," \token{expression} )* [","]}
\end{productionlist}

An expression list containing at least one comma yields a
tuple.  The length of the tuple is the number of expressions in the
list.  The expressions are evaluated from left to right.
\obindex{tuple}

The trailing comma is required only to create a single tuple (a.k.a. a
\emph{singleton}); it is optional in all other cases.  A single
expression without a trailing comma doesn't create a
tuple, but rather yields the value of that expression.
(To create an empty tuple, use an empty pair of parentheses:
\code{()}.)
\indexii{trailing}{comma}


\section{Summary\label{summary}}

The following table summarizes the operator
precedences\indexii{operator}{precedence} in Python, from lowest
precedence (least binding) to highest precedence (most binding).
Operators in the same box have the same precedence.  Unless the syntax
is explicitly given, operators are binary.  Operators in the same box
group left to right (except for comparisons, which chain from left to
right --- see above, and exponentiation, which groups from right to
left).

\begin{tableii}{c|l}{textrm}{Operator}{Description}
    \lineii{\keyword{lambda}}			{Lambda expression}
  \hline
    \lineii{\keyword{or}}			{Boolean OR}
  \hline
    \lineii{\keyword{and}}			{Boolean AND}
  \hline
    \lineii{\keyword{not} \var{x}}		{Boolean NOT}
  \hline
    \lineii{\keyword{in}, \keyword{not} \keyword{in}}{Membership tests}
    \lineii{\keyword{is}, \keyword{is not}}{Identity tests}
    \lineii{\code{<}, \code{<=}, \code{>}, \code{>=},
            \code{<>}, \code{!=}, \code{==}}
	   {Comparisons}
  \hline
    \lineii{\code{|}}				{Bitwise OR}
  \hline
    \lineii{\code{\^}}				{Bitwise XOR}
  \hline
    \lineii{\code{\&}}				{Bitwise AND}
  \hline
    \lineii{\code{<}\code{<}, \code{>}\code{>}}	{Shifts}
  \hline
    \lineii{\code{+}, \code{-}}{Addition and subtraction}
  \hline
    \lineii{\code{*}, \code{/}, \code{\%}}
           {Multiplication, division, remainder}
  \hline
    \lineii{\code{+\var{x}}, \code{-\var{x}}}	{Positive, negative}
    \lineii{\code{\~\var{x}}}			{Bitwise not}
  \hline
    \lineii{\code{**}}				{Exponentiation}
  \hline
    \lineii{\code{\var{x}.\var{attribute}}}	{Attribute reference}
    \lineii{\code{\var{x}[\var{index}]}}	{Subscription}
    \lineii{\code{\var{x}[\var{index}:\var{index}]}}	{Slicing}
    \lineii{\code{\var{f}(\var{arguments}...)}}	{Function call}
  \hline
    \lineii{\code{(\var{expressions}\ldots)}}	{Binding or tuple display}
    \lineii{\code{[\var{expressions}\ldots]}}	{List display}
    \lineii{\code{\{\var{key}:\var{datum}\ldots\}}}{Dictionary display}
    \lineii{\code{`\var{expressions}\ldots`}}	{String conversion}
\end{tableii}
