| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | \chapter{Glossary\label{glossary}} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | %%% keep the entries sorted and include at least one \index{} item for each
 | 
					
						
							| 
									
										
										
										
											2003-09-27 05:42:14 +00:00
										 |  |  | %%% cross-references are marked with \emph{entry}
 | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \begin{description} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \index{>>>} | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | \item[\code{>\code{>}>}] | 
					
						
							|  |  |  | The typical Python prompt of the interactive shell.  Often seen for | 
					
						
							|  |  |  | code examples that can be tried right away in the interpreter. | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-27 20:19:02 +00:00
										 |  |  | \index{...} | 
					
						
							|  |  |  | \item[\code{.\code{.}.}] | 
					
						
							|  |  |  | The typical Python prompt of the interactive shell when entering code | 
					
						
							|  |  |  | for an indented code block. | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \index{BDFL} | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | \item[BDFL] | 
					
						
							|  |  |  | Benevolent Dictator For Life, a.k.a. \ulink{Guido van | 
					
						
							| 
									
										
										
										
											2003-09-27 20:19:02 +00:00
										 |  |  | Rossum}{http://www.python.org/\textasciitilde{}guido/}, Python's creator. | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \index{byte code} | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | \item[byte code] | 
					
						
							|  |  |  | The internal representation of a Python program in the interpreter. | 
					
						
							|  |  |  | The byte code is also cached in the \code{.pyc} and \code{.pyo} | 
					
						
							|  |  |  | files so that executing the same file is faster the second time | 
					
						
							|  |  |  | (compilation from source to byte code can be saved).  This | 
					
						
							| 
									
										
										
										
											2003-09-27 20:19:02 +00:00
										 |  |  | ``intermediate language'' is said to run on a ``virtual | 
					
						
							|  |  |  | machine'' that calls the subroutines corresponding to each bytecode. | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \index{classic class} | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | \item[classic class] | 
					
						
							|  |  |  | Any class which does not inherit from \class{object}.  See | 
					
						
							|  |  |  | \emph{new-style class}. | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \index{coercion} | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | \item[coercion] | 
					
						
							| 
									
										
										
										
											2004-03-27 18:23:11 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | The implicit conversion of an instance of one type to another during an | 
					
						
							|  |  |  | operation which involves two arguments of the same type.  For example, | 
					
						
							|  |  |  | {}\code{int(3.15)} converts the floating point number to the integer, | 
					
						
							|  |  |  | {}\code{3}, but in {}\code{3+4.5}, each argument is of a different type (one | 
					
						
							|  |  |  | int, one float), and both must be converted to the same type before they can | 
					
						
							|  |  |  | be added or it will raise a {}\code{TypeError}.  Coercion between two | 
					
						
							|  |  |  | operands can be performed with the {}\code{coerce} builtin function; thus, | 
					
						
							|  |  |  | {}\code{3+4.5} is equivalent to calling {}\code{operator.add(*coerce(3, | 
					
						
							|  |  |  | 4.5))} and results in {}\code{operator.add(3.0, 4.5)}.  Without coercion, | 
					
						
							|  |  |  | all arguments of even compatible types would have to be normalized to the | 
					
						
							|  |  |  | same value by the programmer, e.g., {}\code{float(3)+4.5} rather than just | 
					
						
							|  |  |  | {}\code{3+4.5}. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \index{complex number} | 
					
						
							|  |  |  | \item[complex number] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | An extension of the familiar real number system in which all numbers are | 
					
						
							|  |  |  | expressed as a sum of a real part and an imaginary part.  Imaginary numbers | 
					
						
							|  |  |  | are real multiples of the imaginary unit (the square root of {}\code{-1}), | 
					
						
							|  |  |  | often written {}\code{i} in mathematics or {}\code{j} in engineering. | 
					
						
							|  |  |  | Python has builtin support for complex numbers, which are written with this | 
					
						
							|  |  |  | latter notation; the imaginary part is written with a {}\code{j} suffix, | 
					
						
							|  |  |  | e.g., {}\code{3+1j}.  To get access to complex equivalents of the | 
					
						
							|  |  |  | {}\module{math} module, use {}\module{cmath}.  Use of complex numbers is a | 
					
						
							| 
									
										
										
										
											2004-03-29 01:19:54 +00:00
										 |  |  | fairly advanced mathematical feature.  If you're not aware of a need for them, | 
					
						
							| 
									
										
										
										
											2004-03-28 22:44:09 +00:00
										 |  |  | it's almost certain you can safely ignore them. | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \index{descriptor} | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | \item[descriptor] | 
					
						
							|  |  |  | Any \emph{new-style} object that defines the methods | 
					
						
							|  |  |  | {}\method{__get__()}, \method{__set__()}, or \method{__delete__()}. | 
					
						
							|  |  |  | When a class attribute is a descriptor, its special binding behavior | 
					
						
							|  |  |  | is triggered upon attribute lookup.  Normally, writing \var{a.b} looks | 
					
						
							|  |  |  | up the object \var{b} in the class dictionary for \var{a}, but if | 
					
						
							|  |  |  | {}\var{b} is a descriptor, the defined method gets called. | 
					
						
							|  |  |  | Understanding descriptors is a key to a deep understanding of Python | 
					
						
							|  |  |  | because they are the basis for many features including functions, | 
					
						
							|  |  |  | methods, properties, class methods, static methods, and reference to | 
					
						
							|  |  |  | super classes. | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \index{dictionary} | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | \item[dictionary] | 
					
						
							|  |  |  | An associative array, where arbitrary keys are mapped to values.  The | 
					
						
							|  |  |  | use of \class{dict} much resembles that for \class{list}, but the keys | 
					
						
							|  |  |  | can be any object with a \method{__hash__()} function, not just | 
					
						
							|  |  |  | integers starting from zero.  Called a hash in Perl. | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \index{EAFP} | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | \item[EAFP] | 
					
						
							|  |  |  | Easier to ask for forgiveness than permission.  This common Python | 
					
						
							|  |  |  | coding style assumes the existence of valid keys or attributes and | 
					
						
							|  |  |  | catches exceptions if the assumption proves false.  This clean and | 
					
						
							|  |  |  | fast style is characterized by the presence of many \keyword{try} and | 
					
						
							|  |  |  | {}\keyword{except} statements.  The technique contrasts with the | 
					
						
							|  |  |  | {}\emph{LBYL} style that is common in many other languages such as C. | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \index{__future__} | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | \item[__future__] | 
					
						
							|  |  |  | A pseudo module which programmers can use to enable new language | 
					
						
							|  |  |  | features which are not compatible with the current interpreter.  For | 
					
						
							| 
									
										
										
										
											2003-09-27 20:19:02 +00:00
										 |  |  | example, the expression \code{11/4} currently evaluates to \code{2}. | 
					
						
							|  |  |  | If the module in which it is executed had enabled \emph{true division} | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | by executing: | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \begin{verbatim} | 
					
						
							|  |  |  | from __future__ import division | 
					
						
							|  |  |  | \end{verbatim} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-28 19:03:36 +00:00
										 |  |  | the expression \code{11/4} would evaluate to \code{2.75}.  By actually | 
					
						
							|  |  |  | importing the \ulink{\module{__future__}}{../lib/module-future.html} | 
					
						
							|  |  |  | module and evaluating its variables, you can see when a new feature | 
					
						
							|  |  |  | was first added to the language and when it will become the default: | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \begin{verbatim} | 
					
						
							|  |  |  | >>> import __future__ | 
					
						
							|  |  |  | >>> __future__.division | 
					
						
							|  |  |  | _Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192) | 
					
						
							|  |  |  | \end{verbatim} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \index{generator} | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | \item[generator] | 
					
						
							| 
									
										
										
										
											2004-03-27 18:23:11 +00:00
										 |  |  | A function that returns an iterator.  It looks like a normal function except | 
					
						
							|  |  |  | that values are returned to the caller using a \keyword{yield} statement | 
					
						
							|  |  |  | instead of a {}\keyword{return} statement.  Generator functions often | 
					
						
							|  |  |  | contain one or more {}\keyword{for} or \keyword{while} loops that | 
					
						
							|  |  |  | \keyword{yield} elements back to the caller.  The function execution is | 
					
						
							|  |  |  | stopped at the {}\keyword{yield} keyword (returning the result) and is | 
					
						
							|  |  |  | resumed there when the next element is requested by calling the | 
					
						
							|  |  |  | \method{next()} method of the returned iterator. | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \index{GIL} | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | \item[GIL] | 
					
						
							|  |  |  | See \emph{global interpreter lock}. | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \index{global interpreter lock} | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | \item[global interpreter lock] | 
					
						
							|  |  |  | The lock used by Python threads to assure that only one thread can be | 
					
						
							|  |  |  | run at a time.  This simplifies Python by assuring that no two | 
					
						
							|  |  |  | processes can access the same memory at the same time.  Locking the | 
					
						
							|  |  |  | entire interpreter makes it easier for the interpreter to be | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | multi-threaded, at the expense of some parallelism on multi-processor | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | machines.  Efforts have been made in the past to create a | 
					
						
							| 
									
										
										
										
											2003-09-27 20:19:02 +00:00
										 |  |  | ``free-threaded'' interpreter (one which locks shared data at a much | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | finer granularity), but performance suffered in the common | 
					
						
							|  |  |  | single-processor case. | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \index{IDLE} | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | \item[IDLE] | 
					
						
							|  |  |  | An Integrated Development Environment for Python.  IDLE is a | 
					
						
							| 
									
										
										
										
											2003-09-27 05:42:14 +00:00
										 |  |  | basic editor and interpreter environment that ships with the standard | 
					
						
							|  |  |  | distribution of Python.  Good for beginners, it also serves as clear | 
					
						
							|  |  |  | example code for those wanting to implement a moderately | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | sophisticated, multi-platform GUI application. | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \index{immutable} | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | \item[immutable] | 
					
						
							| 
									
										
										
										
											2004-03-27 18:23:11 +00:00
										 |  |  | An object with fixed value.  Immutable objects are numbers, strings or | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | tuples (and more).  Such an object cannot be altered.  A new object | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | has to be created if a different value has to be stored.  They play an | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | important role in places where a constant hash value is needed.  For | 
					
						
							|  |  |  | example as a key in a dictionary. | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \index{integer division} | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | \item[integer division] | 
					
						
							|  |  |  | Mathematical division discarding any remainder.  For example, the | 
					
						
							| 
									
										
										
										
											2003-09-27 20:19:02 +00:00
										 |  |  | expression \code{11/4} currently evaluates to \code{2} in contrast | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | to the \code{2.75} returned by float division.  Also called | 
					
						
							|  |  |  | {}\emph{floor division}.  When dividing two integers the outcome will | 
					
						
							|  |  |  | always be another integer (having the floor function applied to it). | 
					
						
							|  |  |  | However, if one of the operands is another numeric type (such as a | 
					
						
							|  |  |  | {}\class{float}), the result will be coerced (see \emph{coercion}) to | 
					
						
							| 
									
										
										
										
											2004-03-27 18:23:11 +00:00
										 |  |  | a common type.  For example, an integer divided by a float will result | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | in a float value, possibly with a decimal fraction.  Integer division | 
					
						
							|  |  |  | can be forced by using the \code{//} operator instead of the \code{/} | 
					
						
							|  |  |  | operator.  See also \emph{__future__}. | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \index{interactive} | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | \item[interactive] | 
					
						
							|  |  |  | Python has an interactive interpreter which means that you can try out | 
					
						
							|  |  |  | things and directly see its result.  Just launch \code{python} with no | 
					
						
							|  |  |  | arguments (possibly by selecting it from your computer's main menu). | 
					
						
							|  |  |  | It is a very powerful way to test out new ideas or inspect modules and | 
					
						
							|  |  |  | packages (remember \code{help(x)}). | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \index{interpreted} | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | \item[interpreted] | 
					
						
							| 
									
										
										
										
											2004-03-27 18:23:11 +00:00
										 |  |  | Python is an interpreted language, as opposed to a compiled one.  This means | 
					
						
							|  |  |  | that the source files can be run directly without first creating an | 
					
						
							|  |  |  | executable which is then run.  Interpreted languages typically have a | 
					
						
							|  |  |  | shorter development/debug cycle than compiled ones, though their programs | 
					
						
							|  |  |  | generally also run more slowly.  See also {}\emph{interactive}. | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \index{iterable} | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | \item[iterable] | 
					
						
							|  |  |  | A container object capable of returning its members one at a time. | 
					
						
							| 
									
										
										
										
											2003-09-27 20:19:02 +00:00
										 |  |  | Examples of iterables include all sequence types (such as \class{list}, | 
					
						
							| 
									
										
										
										
											2003-09-27 05:42:14 +00:00
										 |  |  | {}\class{str}, and \class{tuple}) and some non-sequence types like | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | {}\class{dict} and \class{file} and objects of any classes you define | 
					
						
							|  |  |  | with an \method{__iter__()} or \method{__getitem__()} method.  Iterables | 
					
						
							|  |  |  | can be used in a \keyword{for} loop and in many other places where a | 
					
						
							|  |  |  | sequence is needed (\function{zip()}, \function{map()}, ...).  When an | 
					
						
							|  |  |  | iterable object is passed as an argument to the builtin function | 
					
						
							|  |  |  | {}\function{iter()}, it returns an iterator for the object.  This | 
					
						
							|  |  |  | iterator is good for one pass over the set of values.  When using | 
					
						
							|  |  |  | iterables, it is usually not necessary to call \function{iter()} or | 
					
						
							| 
									
										
										
										
											2003-09-27 20:19:02 +00:00
										 |  |  | deal with iterator objects yourself.  The \code{for} statement does | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | that automatically for you, creating a temporary unnamed variable to | 
					
						
							|  |  |  | hold the iterator for the duration of the loop.  See also | 
					
						
							|  |  |  | {}\emph{iterator}, \emph{sequence}, and \emph{generator}. | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \index{iterator} | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | \item[iterator] | 
					
						
							|  |  |  | An object representing a stream of data.  Repeated calls to the | 
					
						
							|  |  |  | iterator's \method{next()} method return successive items in the | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | stream.  When no more data is available a \exception{StopIteration} | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | exception is raised instead.  At this point, the iterator object is | 
					
						
							|  |  |  | exhausted and any further calls to its \method{next()} method just | 
					
						
							|  |  |  | raise \exception{StopIteration} again.  Iterators are required to have | 
					
						
							|  |  |  | an \method{__iter__()} method that returns the iterator object | 
					
						
							|  |  |  | itself so every iterator is also iterable and may be used in most | 
					
						
							|  |  |  | places where other iterables are accepted.  One notable exception is | 
					
						
							|  |  |  | code that attempts multiple iteration passes.  A container object | 
					
						
							|  |  |  | (such as a \class{list}) produces a fresh new iterator each time you | 
					
						
							|  |  |  | pass it to the \function{iter()} function or use it in a | 
					
						
							|  |  |  | {}\keyword{for} loop.  Attempting this with an iterator will just | 
					
						
							|  |  |  | return the same exhausted iterator object from the second iteration | 
					
						
							|  |  |  | pass, making it appear like an empty container. | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \index{list comprehension} | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | \item[list comprehension] | 
					
						
							|  |  |  | A compact way to process all or a subset of elements in a sequence and | 
					
						
							|  |  |  | return a list with the results.  \code{result = ["0x\%02x" | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | \% x for x in range(256) if x \% 2 == 0]} generates a list of strings | 
					
						
							|  |  |  | containing hex numbers (0x..) that are even and in the range from 0 to 255. | 
					
						
							|  |  |  | The \keyword{if} clause is optional.  If omitted, all elements in | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | {}\code{range(256)} are processed in that case. | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \index{mapping} | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | \item[mapping] | 
					
						
							|  |  |  | A container object (such as \class{dict}) that supports arbitrary key | 
					
						
							|  |  |  | lookups using the special method \method{__getitem__()}. | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \index{metaclass} | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | \item[metaclass] | 
					
						
							|  |  |  | The class of a class.  Class definitions create a class name, a class | 
					
						
							|  |  |  | dictionary, and a list of base classes.  The metaclass is responsible | 
					
						
							|  |  |  | for taking those three arguments and creating the class.  Most object | 
					
						
							|  |  |  | oriented programming languages provide a default implementation.  What | 
					
						
							|  |  |  | makes Python special is that it is possible to create custom | 
					
						
							|  |  |  | metaclasses.  Most users never need this tool, but when the need | 
					
						
							|  |  |  | arises, metaclasses can provide powerful, elegant solutions.  They | 
					
						
							|  |  |  | have been used for logging attribute access, adding thread-safety, | 
					
						
							|  |  |  | tracking object creation, implementing singletons, and many other | 
					
						
							|  |  |  | tasks. | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \index{LBYL} | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | \item[LBYL] | 
					
						
							|  |  |  | Look before you leap.  This coding style explicitly tests for | 
					
						
							|  |  |  | pre-conditions before making calls or lookups.  This style contrasts | 
					
						
							|  |  |  | with the \emph{EAFP} approach and is characterized the presence of | 
					
						
							|  |  |  | many \keyword{if} statements. | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \index{mutable} | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | \item[mutable] | 
					
						
							|  |  |  | Mutable objects can change their value but keep their \function{id()}. | 
					
						
							|  |  |  | See also \emph{immutable}. | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \index{namespace} | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | \item[namespace] | 
					
						
							|  |  |  | The place where a variable is stored.  Namespaces are implemented as | 
					
						
							|  |  |  | dictionary.  There is the local, global and builtins namespace and the | 
					
						
							|  |  |  | nested namespaces in objects (in methods).  Namespaces support | 
					
						
							|  |  |  | modularity by preventing naming conflicts.  For instance, the | 
					
						
							|  |  |  | functions \function{__builtin__.open()} and \function{os.open()} are | 
					
						
							|  |  |  | distinguished by their namespaces.  Namespaces also aid readability | 
					
						
							|  |  |  | and maintainability by making it clear which modules implement a | 
					
						
							|  |  |  | function.  For instance, writing \function{random.seed()} or | 
					
						
							|  |  |  | {}\function{itertools.izip()} makes it clear that those functions are | 
					
						
							| 
									
										
										
										
											2003-09-28 19:03:36 +00:00
										 |  |  | implemented by the \ulink{\module{random}}{../lib/module-random.html} | 
					
						
							|  |  |  | and \ulink{\module{itertools}}{../lib/module-itertools.html} modules | 
					
						
							|  |  |  | respectively. | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \index{nested scope} | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | \item[nested scope] | 
					
						
							|  |  |  | The ability to refer to a variable in an enclosing definition.  For | 
					
						
							|  |  |  | instance, a function defined inside another function can refer to | 
					
						
							|  |  |  | variables in the outer function.  Note that nested scopes work only | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | for reference and not for assignment which will always write to the | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | innermost scope.  In contrast, local variables both read and write in | 
					
						
							|  |  |  | the innermost scope.  Likewise, global variables read and write to the | 
					
						
							|  |  |  | global namespace. | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \index{new-style class} | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | \item[new-style class] | 
					
						
							|  |  |  | Any class that inherits from \class{object}.  This includes all | 
					
						
							|  |  |  | built-in types like \class{list} and \class{dict}.  Only new-style | 
					
						
							|  |  |  | classes can use Python's newer, versatile features like | 
					
						
							| 
									
										
										
										
											2003-09-27 20:19:02 +00:00
										 |  |  | {}\method{__slots__}, descriptors, properties, | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | \method{__getattribute__()}, class methods, and static methods. | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \index{Python3000} | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | \item[Python3000] | 
					
						
							|  |  |  | A mythical python release, allowed not to be backward compatible, with | 
					
						
							|  |  |  | telepathic interface. | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-27 20:19:02 +00:00
										 |  |  | \index{__slots__} | 
					
						
							|  |  |  | \item[__slots__] | 
					
						
							|  |  |  | A declaration inside a \emph{new-style class} that saves memory by | 
					
						
							|  |  |  | pre-declaring space for instance attributes and eliminating instance | 
					
						
							|  |  |  | dictionaries.  Though popular, the technique is somewhat tricky to get | 
					
						
							|  |  |  | right and is best reserved for rare cases where there are large | 
					
						
							|  |  |  | numbers of instances in a memory critical application. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | \index{sequence} | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | \item[sequence] | 
					
						
							|  |  |  | An \emph{iterable} which supports efficient element access using | 
					
						
							|  |  |  | integer indices via the \method{__getitem__()} and | 
					
						
							|  |  |  | {}\method{__len__()} special methods.  Some built-in sequence types | 
					
						
							|  |  |  | are \class{list}, \class{str}, \class{tuple}, and \class{unicode}. | 
					
						
							|  |  |  | Note that \class{dict} also supports \method{__getitem__()} and | 
					
						
							|  |  |  | {}\method{__len__()}, but is considered a mapping rather than a | 
					
						
							|  |  |  | sequence because the lookups use arbitrary \emph{immutable} keys | 
					
						
							|  |  |  | rather than integers. | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \index{Zen of Python} | 
					
						
							| 
									
										
										
										
											2003-09-27 18:59:43 +00:00
										 |  |  | \item[Zen of Python] | 
					
						
							|  |  |  | Listing of Python design principles and philosophies that are helpful | 
					
						
							|  |  |  | in understanding and using the language.  The listing can be found by | 
					
						
							| 
									
										
										
										
											2003-09-27 20:19:02 +00:00
										 |  |  | typing ``\code{import this}'' at the interactive prompt. | 
					
						
							| 
									
										
										
										
											2003-09-24 16:51:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \end{description} |