\section{\module{array} ---
         Efficient arrays of numeric values}

\declaremodule{builtin}{array}
\modulesynopsis{Efficient arrays of uniformly typed numeric values.}


This module defines an object type which can efficiently represent
an array of basic values: characters, integers, floating point
numbers.  Arrays\index{arrays} are sequence types and behave very much
like lists, except that the type of objects stored in them is
constrained.  The type is specified at object creation time by using a
\dfn{type code}, which is a single character.  The following type
codes are defined:

\begin{tableiv}{c|l|l|c}{code}{Type code}{C Type}{Python Type}{Minimum size in bytes}
  \lineiv{'c'}{char}          {character}        {1}
  \lineiv{'b'}{signed char}   {int}              {1}
  \lineiv{'B'}{unsigned char} {int}              {1}
  \lineiv{'u'}{Py_UNICODE}    {Unicode character}{2}
  \lineiv{'h'}{signed short}  {int}              {2}
  \lineiv{'H'}{unsigned short}{int}              {2}
  \lineiv{'i'}{signed int}    {int}              {2}
  \lineiv{'I'}{unsigned int}  {long}             {2}
  \lineiv{'l'}{signed long}   {int}              {4}
  \lineiv{'L'}{unsigned long} {long}             {4}
  \lineiv{'f'}{float}         {float}            {4}
  \lineiv{'d'}{double}        {float}            {8}
\end{tableiv}

The actual representation of values is determined by the machine
architecture (strictly speaking, by the C implementation).  The actual
size can be accessed through the \member{itemsize} attribute.  The values
stored  for \code{'L'} and \code{'I'} items will be represented as
Python long integers when retrieved, because Python's plain integer
type cannot represent the full range of C's unsigned (long) integers.


The module defines the following type:

\begin{funcdesc}{array}{typecode\optional{, initializer}}
Return a new array whose items are restricted by \var{typecode},
and initialized from the optional \var{initializer} value, which
must be a list or a string.  The list or string is passed to the
new array's \method{fromlist()}, \method{fromstring()}, or
\method{fromunicode()} method (see below) to add initial items to
the array.
\end{funcdesc}

\begin{datadesc}{ArrayType}
Obsolete alias for \function{array}.
\end{datadesc}


Array objects support the ordinary sequence operations of
indexing, slicing, concatenation, and multiplication.  When using
slice assignment, the assigned value must be an array object with the
same type code; in all other cases, \exception{TypeError} is raised.
Array objects also implement the buffer interface, and may be used
wherever buffer objects are supported.

The following data items and methods are also supported:

\begin{memberdesc}[array]{typecode}
The typecode character used to create the array.
\end{memberdesc}

\begin{memberdesc}[array]{itemsize}
The length in bytes of one array item in the internal representation.
\end{memberdesc}


\begin{methoddesc}[array]{append}{x}
Append a new item with value \var{x} to the end of the array.
\end{methoddesc}

\begin{methoddesc}[array]{buffer_info}{}
Return a tuple \code{(\var{address}, \var{length})} giving the current
memory address and the length in elements of the buffer used to hold
array's contents.  The size of the memory buffer in bytes can be
computed as \code{\var{array}.buffer_info()[1] *
\var{array}.itemsize}.  This is occasionally useful when working with
low-level (and inherently unsafe) I/O interfaces that require memory
addresses, such as certain \cfunction{ioctl()} operations.  The
returned numbers are valid as long as the array exists and no
length-changing operations are applied to it.

\note{When using array objects from code written in C or
\Cpp{} (the only way to effectively make use of this information), it
makes more sense to use the buffer interface supported by array
objects.  This method is maintained for backward compatibility and
should be avoided in new code.  The buffer interface is documented in
the \citetitle[../api/newTypes.html]{Python/C API Reference Manual}.}
\end{methoddesc}

\begin{methoddesc}[array]{byteswap}{}
``Byteswap'' all items of the array.  This is only supported for
values which are 1, 2, 4, or 8 bytes in size; for other types of
values, \exception{RuntimeError} is raised.  It is useful when reading
data from a file written on a machine with a different byte order.
\end{methoddesc}

\begin{methoddesc}[array]{count}{x}
Return the number of occurences of \var{x} in the array.
\end{methoddesc}

\begin{methoddesc}[array]{extend}{a}
Append array items from \var{a} to the end of the array.  The two
arrays must have \emph{exactly} the same type code; if not,
\exception{TypeError} will be raised.
\end{methoddesc}

\begin{methoddesc}[array]{fromfile}{f, n}
Read \var{n} items (as machine values) from the file object \var{f}
and append them to the end of the array.  If less than \var{n} items
are available, \exception{EOFError} is raised, but the items that were
available are still inserted into the array.  \var{f} must be a real
built-in file object; something else with a \method{read()} method won't
do.
\end{methoddesc}

\begin{methoddesc}[array]{fromlist}{list}
Append items from the list.  This is equivalent to
\samp{for x in \var{list}:\ a.append(x)}
except that if there is a type error, the array is unchanged.
\end{methoddesc}

\begin{methoddesc}[array]{fromstring}{s}
Appends items from the string, interpreting the string as an
array of machine values (as if it had been read from a
file using the \method{fromfile()} method).
\end{methoddesc}

\begin{methoddesc}[array]{fromunicode}{s}
Extends this array with data from the given unicode string.
The array must be a type 'u' array; otherwise a ValueError
is raised.  Use \samp{array.fromstring(ustr.decode(enc))} to
append Unicode data to an array of some other type.
\end{methoddesc}

\begin{methoddesc}[array]{index}{x}
Return the smallest \var{i} such that \var{i} is the index of
the first occurence of \var{x} in the array.
\end{methoddesc}

\begin{methoddesc}[array]{insert}{i, x}
Insert a new item with value \var{x} in the array before position
\var{i}.
\end{methoddesc}

\begin{methoddesc}[array]{pop}{\optional{i}}
Removes the item with the index \var{i} from the array and returns
it. The optional argument defaults to \code{-1}, so that by default
the last item is removed and returned.
\end{methoddesc}

\begin{methoddesc}[array]{read}{f, n}
\deprecated {1.5.1}
  {Use the \method{fromfile()} method.}
Read \var{n} items (as machine values) from the file object \var{f}
and append them to the end of the array.  If less than \var{n} items
are available, \exception{EOFError} is raised, but the items that were
available are still inserted into the array.  \var{f} must be a real
built-in file object; something else with a \method{read()} method won't
do.
\end{methoddesc}

\begin{methoddesc}[array]{remove}{x}
Remove the first occurence of \var{x} from the array.
\end{methoddesc}

\begin{methoddesc}[array]{reverse}{}
Reverse the order of the items in the array.
\end{methoddesc}

\begin{methoddesc}[array]{tofile}{f}
Write all items (as machine values) to the file object \var{f}.
\end{methoddesc}

\begin{methoddesc}[array]{tolist}{}
Convert the array to an ordinary list with the same items.
\end{methoddesc}

\begin{methoddesc}[array]{tostring}{}
Convert the array to an array of machine values and return the
string representation (the same sequence of bytes that would
be written to a file by the \method{tofile()} method.)
\end{methoddesc}

\begin{methoddesc}[array]{tounicode}{}
Convert the array to a unicode string.  The array must be
a type 'u' array; otherwise a ValueError is raised.  Use
array.tostring().decode(enc) to obtain a unicode string
from an array of some other type.
\end{methoddesc}

\begin{methoddesc}[array]{write}{f}
\deprecated {1.5.1}
  {Use the \method{tofile()} method.}
Write all items (as machine values) to the file object \var{f}.
\end{methoddesc}

When an array object is printed or converted to a string, it is
represented as \code{array(\var{typecode}, \var{initializer})}.  The
\var{initializer} is omitted if the array is empty, otherwise it is a
string if the \var{typecode} is \code{'c'}, otherwise it is a list of
numbers.  The string is guaranteed to be able to be converted back to
an array with the same type and value using reverse quotes
(\code{``}), so long as the \function{array()} function has been
imported using \code{from array import array}.  Examples:

\begin{verbatim}
array('l')
array('c', 'hello world')
array('u', u'hello \textbackslash u2641')
array('l', [1, 2, 3, 4, 5])
array('d', [1.0, 2.0, 3.14])
\end{verbatim}


\begin{seealso}
  \seemodule{struct}{Packing and unpacking of heterogeneous binary data.}
  \seemodule{xdrlib}{Packing and unpacking of External Data
                     Representation (XDR) data as used in some remote
                     procedure call systems.}
  \seetitle[http://numpy.sourceforge.net/numdoc/HTML/numdoc.htm]{The
           Numerical Python Manual}{The Numeric Python extension
           (NumPy) defines another array type; see
           \url{http://numpy.sourceforge.net/} for further information
           about Numerical Python.  (A PDF version of the NumPy manual
           is available at
           \url{http://numpy.sourceforge.net/numdoc/numdoc.pdf}.}
\end{seealso}
