| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | % Format this file with latex.
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  |   | 
					
						
							|  |  |  | \documentstyle[myformat]{report} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \title{\bf | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | 	Python Tutorial | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | 	 | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | \author{ | 
					
						
							|  |  |  | 	Guido van Rossum \\ | 
					
						
							|  |  |  | 	Dept. CST, CWI, Kruislaan 413 \\ | 
					
						
							|  |  |  | 	1098 SJ Amsterdam, The Netherlands \\ | 
					
						
							|  |  |  | 	E-mail: {\tt guido@cwi.nl} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{document} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \pagenumbering{roman} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \maketitle | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{abstract} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \noindent | 
					
						
							| 
									
										
										
										
											1991-06-04 20:22:18 +00:00
										 |  |  | Python is a simple, yet powerful programming language that bridges the | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | gap between C and shell programming, and is thus ideally suited for | 
					
						
							|  |  |  | ``throw-away programming'' | 
					
						
							|  |  |  | and rapid prototyping.  Its syntax is put | 
					
						
							|  |  |  | together from constructs borrowed from a variety of other languages; | 
					
						
							|  |  |  | most prominent are influences from ABC, C, Modula-3 and Icon. | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-06-04 20:22:18 +00:00
										 |  |  | The Python interpreter is easily extended with new functions and data | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | types implemented in C.  Python is also suitable as an extension | 
					
						
							|  |  |  | language for highly customizable C applications such as editors or | 
					
						
							|  |  |  | window managers. | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-06-04 20:22:18 +00:00
										 |  |  | Python is available for various operating systems, amongst which | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | several flavors of {\UNIX}, Amoeba, the Apple Macintosh O.S., | 
					
						
							|  |  |  | and MS-DOS. | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | This tutorial introduces the reader informally to the basic concepts | 
					
						
							|  |  |  | and features of the Python language and system.  It helps to have a | 
					
						
							|  |  |  | Python interpreter handy for hands-on experience, but as the examples | 
					
						
							|  |  |  | are self-contained, the tutorial can be read off-line as well. | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | For a description of standard objects and modules, see the {\em | 
					
						
							|  |  |  | Library Reference} document.  The {\em Language Reference} document | 
					
						
							|  |  |  | (when it is ever written) | 
					
						
							|  |  |  | will give a more formal definition of the language. | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \end{abstract} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \pagebreak | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \tableofcontents | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \pagebreak | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \pagenumbering{arabic} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | \chapter{Whetting Your Appetite} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If you ever wrote a large shell script, you probably know this | 
					
						
							|  |  |  | feeling: you'd love to add yet another feature, but it's already so | 
					
						
							|  |  |  | slow, and so big, and so complicated; or the feature involves a system | 
					
						
							|  |  |  | call or other funcion that is only accessible from C \ldots  Usually | 
					
						
							|  |  |  | the problem at hand isn't serious enough to warrant rewriting the | 
					
						
							|  |  |  | script in C; perhaps because the problem requires variable-length | 
					
						
							|  |  |  | strings or other data types (like sorted lists of file names) that are | 
					
						
							|  |  |  | easy in the shell but lots of work to implement in C; or perhaps just | 
					
						
							|  |  |  | because you're not sufficiently familiar with C. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | In such cases, Python may be just the language for you.  Python is | 
					
						
							|  |  |  | simple to use, but it is a real programming language, offering much | 
					
						
							|  |  |  | more structure and support for large programs than the shell has.  On | 
					
						
							|  |  |  | the other hand, it also offers much more error checking than C, and, | 
					
						
							|  |  |  | being a {\em very-high-level language}, it has high-level data types | 
					
						
							|  |  |  | built in, such as flexible arrays and dictionaries that would cost you | 
					
						
							|  |  |  | days to implement efficiently in C.  Because of its more general data | 
					
						
							|  |  |  | types Python is applicable to a much larger problem domain than {\em | 
					
						
							|  |  |  | Awk} or even {\em Perl}, yet most simple things are at least as easy | 
					
						
							|  |  |  | in Python as in those languages. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Python allows you to split up your program in modules that can be | 
					
						
							|  |  |  | reused in other Python programs.  It comes with a large collection of | 
					
						
							|  |  |  | standard modules that you can use as the basis of your programs --- | 
					
						
							|  |  |  | or as examples to start learning to program in Python.  There are also | 
					
						
							|  |  |  | built-in modules that provide things like file I/O, system calls, and | 
					
						
							|  |  |  | even a generic interface to window systems (STDWIN). | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-06-04 20:22:18 +00:00
										 |  |  | Python is an interpreted language, which saves you considerable time | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | during program development because no compilation and linking is | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | necessary.  The interpreter can be used interactively, which makes it | 
					
						
							|  |  |  | easy to experiment with features of the language, to write throw-away | 
					
						
							|  |  |  | programs, or to test functions during bottom-up program development. | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | It is also a handy desk calculator. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | Python allows writing very compact and readable programs.  Programs | 
					
						
							|  |  |  | written in Python are typically much shorter than equivalent C | 
					
						
							|  |  |  | programs, for several reasons: | 
					
						
							|  |  |  | \begin{itemize} | 
					
						
							|  |  |  | \item | 
					
						
							|  |  |  | the high-level data types allow you to express complex operations in a | 
					
						
							|  |  |  | single statement; | 
					
						
							|  |  |  | \item | 
					
						
							|  |  |  | statement grouping is done by indentation instead of begin/end | 
					
						
							|  |  |  | brackets; | 
					
						
							|  |  |  | \item | 
					
						
							|  |  |  | no variable or argument declarations are necessary. | 
					
						
							|  |  |  | \end{itemize} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Python is {\em extensible}: if you know how to program in C it is easy | 
					
						
							|  |  |  | to add a new built-in | 
					
						
							|  |  |  | function or | 
					
						
							|  |  |  | module to the interpreter, either to | 
					
						
							|  |  |  | perform critical operations at maximum speed, or to link Python | 
					
						
							|  |  |  | programs to libraries that may only be available in binary form (such | 
					
						
							|  |  |  | as a vendor-specific graphics library).  Once you are really hooked, | 
					
						
							|  |  |  | you can link the Python interpreter into an application written in C | 
					
						
							|  |  |  | and use it as an extension or command language. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \section{Where From Here} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Now that you are all excited about Python, you'll want to examine it | 
					
						
							|  |  |  | in some more detail.  Since the best introduction to a language is | 
					
						
							|  |  |  | using it, you are invited here to do so. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | In the next chapter, the mechanics of using the interpreter are | 
					
						
							|  |  |  | explained.  This is rather mundane information, but essential for | 
					
						
							|  |  |  | trying out the examples shown later. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-06-04 20:22:18 +00:00
										 |  |  | The rest of the tutorial introduces various features of the Python | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | language and system though examples, beginning with simple | 
					
						
							|  |  |  | expressions, statements and data types, through functions and modules, | 
					
						
							|  |  |  | and finally touching upon advanced concepts like exceptions. | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | When you're through with the turtorial (or just getting bored), you | 
					
						
							|  |  |  | should read the Library Reference, which gives complete (though terse) | 
					
						
							|  |  |  | reference material about built-in and standard types, functions and | 
					
						
							|  |  |  | modules that can save you a lot of time when writing Python programs. | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | \chapter{Using the Python Interpreter} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The Python interpreter is usually installed as {\tt /usr/local/python} | 
					
						
							|  |  |  | on those machines where it is available; putting {\tt /usr/local} in | 
					
						
							|  |  |  | your {\UNIX} shell's search path makes it possible to start it by | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | typing the command | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | python | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | to the shell.  Since the choice of the directory where the interpreter | 
					
						
							|  |  |  | lives is an installation option, other places are possible; check with | 
					
						
							|  |  |  | your local Python guru or system administrator. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The interpreter operates somewhat like the {\UNIX} shell: when called | 
					
						
							|  |  |  | with standard input connected to a tty device, it reads and executes | 
					
						
							|  |  |  | commands interactively; when called with a file name argument or with | 
					
						
							|  |  |  | a file as standard input, it reads and executes a {\em script} from | 
					
						
							|  |  |  | that file. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Note that there is a difference between ``{\tt python file}'' and | 
					
						
							|  |  |  | ``{\tt python $<$file}''.  In the latter case, input requests from the | 
					
						
							|  |  |  | program, such as calls to {\tt input()} and {\tt raw\_input()}, are | 
					
						
							|  |  |  | satisfied from {\em file}.  Since this file has already been read | 
					
						
							|  |  |  | until the end by the parser before the program starts executing, the | 
					
						
							|  |  |  | program will encounter EOF immediately.  In the former case (which is | 
					
						
							|  |  |  | usually what you want) they are satisfied from whatever file or device | 
					
						
							|  |  |  | is connected to standard input of the Python interpreter. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-06-07 14:31:11 +00:00
										 |  |  | A third possibility is ``{\tt python -c command [arg] ...}'', which | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | executes the statement(s) in {\tt command}, analogous to the shell's | 
					
						
							|  |  |  | {\tt -c} option.  Usually {\tt command} will contain spaces or other | 
					
						
							|  |  |  | characters that are special to the shell, so it is best to quote it. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | When available, the script name and additional arguments thereafter | 
					
						
							|  |  |  | are passed to the script in the variable {\tt sys.argv}, which is a | 
					
						
							|  |  |  | list of strings. | 
					
						
							| 
									
										
										
										
											1991-06-07 14:31:11 +00:00
										 |  |  | When {\tt -c command} is used, {\tt sys.argv} is set to {\tt '-c'}. | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-06-07 14:31:11 +00:00
										 |  |  | When commands are read from a tty, the interpreter is said to be in | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | {\em interactive\ mode}.  In this mode it prompts for the next command | 
					
						
							|  |  |  | with the {\em primary\ prompt}, usually three greater-than signs ({\tt | 
					
						
							|  |  |  | >>>}); for continuation lines it prompts with the {\em secondary\ | 
					
						
							|  |  |  | prompt}, by default three dots ({\tt ...}).  Typing an EOF (Control-D) | 
					
						
							|  |  |  | at the primary prompt causes the interpreter to exit with a zero exit | 
					
						
							|  |  |  | status. | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | When an error occurs in interactive mode, the interpreter prints a | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | message and a stack trace and returns to the primary prompt; with | 
					
						
							|  |  |  | input from a file, it exits with a nonzero exit status after printing | 
					
						
							|  |  |  | the stack trace.  (Exceptions handled by an {\tt except} clause in a | 
					
						
							|  |  |  | {\tt try} statement are not errors in this context.)  Some errors are | 
					
						
							|  |  |  | unconditionally fatal and cause an exit with a nonzero exit; this | 
					
						
							|  |  |  | applies to internal inconsistencies and some cases of running out of | 
					
						
							|  |  |  | memory.  All error messages are written to the standard error stream; | 
					
						
							|  |  |  | normal output from the executed commands is written to standard | 
					
						
							|  |  |  | output. | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Typing an interrupt (normally Control-C or DEL) to the primary or | 
					
						
							|  |  |  | secondary prompt cancels the input and returns to the primary prompt. | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | Typing an interrupt while a command is being executed raises the {\tt | 
					
						
							|  |  |  | KeyboardInterrupt} exception, which may be handled by a {\tt try} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | statement. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | When a module named | 
					
						
							|  |  |  | {\tt foo} | 
					
						
							|  |  |  | is imported, the interpreter searches for a file named | 
					
						
							|  |  |  | {\tt foo.py} | 
					
						
							|  |  |  | in a list of directories specified by the environment variable | 
					
						
							|  |  |  | {\tt PYTHONPATH}. | 
					
						
							| 
									
										
										
										
											1991-06-04 20:22:18 +00:00
										 |  |  | It has the same syntax as the {\UNIX} shell variable | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | {\tt PATH}, | 
					
						
							|  |  |  | i.e., a list of colon-separated directory names. | 
					
						
							|  |  |  | When | 
					
						
							|  |  |  | {\tt PYTHONPATH} | 
					
						
							|  |  |  | is not set, an installation-dependent default path is used, usually | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | {\tt .:/usr/local/lib/python}. | 
					
						
							|  |  |  | (Modules are really searched in the list of directories given by the | 
					
						
							|  |  |  | variable {\tt sys.path} which is initialized from {\tt PYTHONPATH} or | 
					
						
							|  |  |  | from the installation-dependent default.  See the section on Standard | 
					
						
							|  |  |  | Modules later.) | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | As an important speed-up of the start-up time for short programs, if a | 
					
						
							| 
									
										
										
										
											1991-06-04 20:22:18 +00:00
										 |  |  | file called {\tt foo.pyc} exists in the directory where {\tt foo.py} | 
					
						
							|  |  |  | is found, this is assumed to contain an already-``compiled'' version | 
					
						
							|  |  |  | of the module {\tt foo}.  The last modification time of {\tt foo.py} | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | is recorded in {\tt foo.pyc}, and the file is ignored if these don't | 
					
						
							|  |  |  | match.  Whenever {\tt foo.py} is successfully compiled, an attempt is | 
					
						
							|  |  |  | made to write the compiled version to {\tt foo.pyc}. | 
					
						
							| 
									
										
										
										
											1991-06-04 20:22:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | On BSD'ish {\UNIX} systems, Python scripts can be made directly | 
					
						
							|  |  |  | executable, like shell scripts, by putting the line | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | #! /usr/local/python | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | (assuming that's the name of the interpreter) at the beginning of the | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | script and giving the file an executable mode.  (The {\tt \#!} must be | 
					
						
							|  |  |  | the first two characters of the file.) | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | \section{Interactive Input Editing and History Substitution} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-06-04 20:22:18 +00:00
										 |  |  | Some versions of the Python interpreter support editing of the current | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | input line and history substitution, similar to facilities found in | 
					
						
							|  |  |  | the Korn shell and the GNU Bash shell.  This is implemented using the | 
					
						
							|  |  |  | {\em GNU\ Readline} library, which supports Emacs-style and vi-style | 
					
						
							|  |  |  | editing.  This library has its own documentation which I won't | 
					
						
							|  |  |  | duplicate here; however, the basics are easily explained. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Perhaps the quickest check to see whether command line editing is | 
					
						
							|  |  |  | supported is typing Control-P to the first Python prompt you get.  If | 
					
						
							|  |  |  | it beeps, you have command line editing.  If nothing appears to | 
					
						
							|  |  |  | happen, or if \verb/^P/ is echoed, you can skip the rest of this | 
					
						
							|  |  |  | section. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If supported, input line editing is active whenever the interpreter | 
					
						
							|  |  |  | prints a primary or secondary prompt.  The current line can be edited | 
					
						
							|  |  |  | using the conventional Emacs control characters.  The most important | 
					
						
							|  |  |  | of these are: C-A (Control-A) moves the cursor to the beginning of the | 
					
						
							|  |  |  | line, C-E to the end, C-B moves it one position to the left, C-F to | 
					
						
							|  |  |  | the right.  Backspace erases the character to the left of the cursor, | 
					
						
							|  |  |  | C-D the character to its right.  C-K kills (erases) the rest of the | 
					
						
							|  |  |  | line to the right of the cursor, C-Y yanks back the last killed | 
					
						
							|  |  |  | string.  C-underscore undoes the last change you made; it can be | 
					
						
							|  |  |  | repeated for cumulative effect. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | History substitution works as follows.  All non-empty input lines | 
					
						
							|  |  |  | issued are saved in a history buffer, and when a new prompt is given | 
					
						
							|  |  |  | you are positioned on a new line at the bottom of this buffer.  C-P | 
					
						
							|  |  |  | moves one line up (back) in the history buffer, C-N moves one down. | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | Any line in the history buffer can be edited; an asterisk appears in | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | front of the prompt to mark a line as modified.  Pressing the Return | 
					
						
							|  |  |  | key passes the current line to the interpreter.  C-R starts an | 
					
						
							|  |  |  | incremental reverse search; C-S starts a forward search. | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | The key bindings and some other parameters of the Readline library can | 
					
						
							|  |  |  | be customized by placing commands in an initialization file called | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | {\tt \$HOME/.inputrc}.  Key bindings have the form | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | key-name: function-name | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | and options can be set with | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | set option-name value | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | Example: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | # I prefer vi-style editing: | 
					
						
							|  |  |  | set editing-mode vi | 
					
						
							|  |  |  | # Edit using a single line: | 
					
						
							|  |  |  | set horizontal-scroll-mode On | 
					
						
							|  |  |  | # Rebind some keys: | 
					
						
							|  |  |  | Meta-h: backward-kill-word | 
					
						
							|  |  |  | Control-u: universal-argument | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-06-04 20:22:18 +00:00
										 |  |  | Note that the default binding for TAB in Python is to insert a TAB | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | instead of Readline's default filename completion function.  If you | 
					
						
							|  |  |  | insist, you can override this by putting | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | TAB: complete | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | in your {\tt \$HOME/.inputrc}.  (Of course, this makes it hard to type | 
					
						
							|  |  |  | indented continuation lines.) | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | This facility is an enormous step forward compared to previous | 
					
						
							|  |  |  | versions of the interpreter; however, some wishes are left: It would | 
					
						
							|  |  |  | be nice if the proper indentation were suggested on continuation lines | 
					
						
							|  |  |  | (the parser knows if an indent token is required next).  The | 
					
						
							|  |  |  | completion mechanism might use the interpreter's symbol table.  A | 
					
						
							|  |  |  | function to check (or even suggest) matching parentheses, quotes etc. | 
					
						
							|  |  |  | would also be useful. | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | \chapter{An Informal Introduction to Python} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | In the following examples, input and output are distinguished by the | 
					
						
							|  |  |  | presence or absence of prompts ({\tt >>>} and {\tt ...}): to repeat the | 
					
						
							|  |  |  | example, you must type everything after the prompt, when the prompt | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | appears; | 
					
						
							|  |  |  | lines that do not begin with a prompt are output from the interpreter. | 
					
						
							|  |  |  | Note that a secondary prompt on a line by itself in an example means | 
					
						
							|  |  |  | you must type a blank line; this is used to end a multi-line command. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \section{Using Python as a Calculator} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Let's try some simple Python commands.  Start the interpreter and wait | 
					
						
							|  |  |  | for the primary prompt, {\tt >>>}. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The interpreter acts as a simple calculator: you can type an | 
					
						
							|  |  |  | expression at it and it will write the value.  Expression syntax is | 
					
						
							|  |  |  | straightforward: the operators {\tt +}, {\tt -}, {\tt *} and {\tt /} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | work just as in most other languages (e.g., Pascal or C); parentheses | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | can be used for grouping.  For example: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> # This is a comment | 
					
						
							|  |  |  | >>> 2+2 | 
					
						
							|  |  |  | 4 | 
					
						
							|  |  |  | >>>  | 
					
						
							|  |  |  | >>> (50-5+5*6+25)/4 | 
					
						
							|  |  |  | 25 | 
					
						
							|  |  |  | >>> # Division truncates towards zero: | 
					
						
							|  |  |  | >>> 7/3 | 
					
						
							|  |  |  | 2 | 
					
						
							|  |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | As in C, the equal sign ({\tt =}) is used to assign a value to a | 
					
						
							|  |  |  | variable.  The value of an assignment is not written: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> width = 20 | 
					
						
							|  |  |  | >>> height = 5*9 | 
					
						
							|  |  |  | >>> width * height | 
					
						
							|  |  |  | 900 | 
					
						
							|  |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | A value can be assigned to several variables simultaneously: | 
					
						
							|  |  |  | \bcode\begin{verbatim} | 
					
						
							|  |  |  | >>> # Zero x, y and z | 
					
						
							|  |  |  | >>> x = y = z = 0 | 
					
						
							|  |  |  | >>> | 
					
						
							|  |  |  | \end{verbatim}\ecode | 
					
						
							|  |  |  | There is full support for floating point; operators with mixed type | 
					
						
							|  |  |  | operands convert the integer operand to floating point: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | >>> 4 * 2.5 / 3.3 | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 3.0303030303 | 
					
						
							|  |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | Besides numbers, Python can also manipulate strings, enclosed in | 
					
						
							|  |  |  | single quotes: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> 'foo bar' | 
					
						
							|  |  |  | 'foo bar' | 
					
						
							|  |  |  | >>> 'doesn\'t' | 
					
						
							|  |  |  | 'doesn\'t' | 
					
						
							|  |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | Strings are written | 
					
						
							|  |  |  | the same way as they are typed for input: | 
					
						
							|  |  |  | inside quotes and with quotes and other funny characters escaped by | 
					
						
							|  |  |  | backslashes, to show the precise value.  (There is also a way to write | 
					
						
							|  |  |  | strings without quotes and escapes.) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Strings can be concatenated (glued together) with the {\tt +} | 
					
						
							|  |  |  | operator, and repeated with {\tt *}: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> word = 'Help' + 'A' | 
					
						
							|  |  |  | >>> word | 
					
						
							|  |  |  | 'HelpA' | 
					
						
							|  |  |  | >>> '<' + word*5 + '>' | 
					
						
							|  |  |  | '<HelpAHelpAHelpAHelpAHelpA>' | 
					
						
							|  |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | Strings can be subscripted; as in C, the first character of a string | 
					
						
							|  |  |  | has subscript 0. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | There is no separate character type; a character is simply a string of | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | size one.  As in Icon, substrings can be specified with the {\em | 
					
						
							|  |  |  | slice} notation: two subscripts (indices) separated by a colon. | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> word[4] | 
					
						
							|  |  |  | 'A' | 
					
						
							|  |  |  | >>> word[0:2] | 
					
						
							|  |  |  | 'He' | 
					
						
							|  |  |  | >>> word[2:4] | 
					
						
							|  |  |  | 'lp' | 
					
						
							|  |  |  | >>> # Slice indices have useful defaults: | 
					
						
							|  |  |  | >>> word[:2]    # Take first two characters | 
					
						
							|  |  |  | 'He' | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | >>> word[2:]    # Drop first two characters | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 'lpA' | 
					
						
							|  |  |  | >>> # A useful invariant: s[:i] + s[i:] = s | 
					
						
							|  |  |  | >>> word[:3] + word[3:] | 
					
						
							|  |  |  | 'HelpA' | 
					
						
							|  |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | Degenerate cases are handled gracefully: an index that is too large is | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | replaced by the string size, an upper bound smaller than the lower | 
					
						
							|  |  |  | bound returns an empty string. | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> word[1:100] | 
					
						
							|  |  |  | 'elpA' | 
					
						
							|  |  |  | >>> word[10:] | 
					
						
							|  |  |  | '' | 
					
						
							|  |  |  | >>> word[2:1] | 
					
						
							|  |  |  | '' | 
					
						
							|  |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | Slice indices (but not simple subscripts) may be negative numbers, to | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | start counting from the right.  For example: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> word[-2:]    # Take last two characters | 
					
						
							|  |  |  | 'pA' | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | >>> word[:-2]    # Drop last two characters | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 'Hel' | 
					
						
							|  |  |  | >>> # But -0 does not count from the right! | 
					
						
							|  |  |  | >>> word[-0:]    # (since -0 equals 0) | 
					
						
							|  |  |  | 'HelpA' | 
					
						
							|  |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | The best way to remember how slices work is to think of the indices as | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | pointing {\em between} characters, with the left edge of the first | 
					
						
							|  |  |  | character numbered 0.  Then the right edge of the last character of a | 
					
						
							|  |  |  | string of {\tt n} characters has index {\tt n}, for example: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  |  +---+---+---+---+---+  | 
					
						
							|  |  |  |  | H | e | l | p | A | | 
					
						
							|  |  |  |  +---+---+---+---+---+  | 
					
						
							|  |  |  |  0   1   2   3   4   5  | 
					
						
							|  |  |  | -5  -4  -3  -2  -1 | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | The first row of numbers gives the position of the indices 0...5 in | 
					
						
							|  |  |  | the string; the second row gives the corresponding negative indices. | 
					
						
							|  |  |  | For nonnegative indices, the length of a slice is the difference of | 
					
						
							|  |  |  | the indices, if both are within bounds, e.g., the length of {\tt | 
					
						
							|  |  |  | word[1:3]} is 3--1 = 2. | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | The built-in function {\tt len()} computes the length of a string: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> s = 'supercalifragilisticexpialidocious' | 
					
						
							|  |  |  | >>> len(s) | 
					
						
							|  |  |  | 34 | 
					
						
							|  |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | Python knows a number of {\em compound} data types, used to group | 
					
						
							|  |  |  | together other values.  The most versatile is the {\em list}, which | 
					
						
							|  |  |  | can be written as a list of comma-separated values between square | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | brackets: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> a = ['foo', 'bar', 100, 1234] | 
					
						
							|  |  |  | >>> a | 
					
						
							|  |  |  | ['foo', 'bar', 100, 1234] | 
					
						
							|  |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | As for strings, list subscripts start at 0: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> a[0] | 
					
						
							|  |  |  | 'foo' | 
					
						
							|  |  |  | >>> a[3] | 
					
						
							|  |  |  | 1234 | 
					
						
							|  |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-06-04 20:22:18 +00:00
										 |  |  | Lists can be sliced, concatenated and so on, like strings: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> a[1:3] | 
					
						
							|  |  |  | ['bar', 100] | 
					
						
							|  |  |  | >>> a[:2] + ['bletch', 2*2] | 
					
						
							|  |  |  | ['foo', 'bar', 'bletch', 4] | 
					
						
							| 
									
										
										
										
											1991-06-04 20:22:18 +00:00
										 |  |  | >>> 3*a[:3] + ['Boe!'] | 
					
						
							|  |  |  | ['foo', 'bar', 100, 'foo', 'bar', 100, 'foo', 'bar', 100, 'Boe!'] | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | Unlike strings, which are {\em immutable}, it is possible to change | 
					
						
							|  |  |  | individual elements of a list: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> a | 
					
						
							|  |  |  | ['foo', 'bar', 100, 1234] | 
					
						
							|  |  |  | >>> a[2] = a[2] + 23 | 
					
						
							|  |  |  | >>> a | 
					
						
							|  |  |  | ['foo', 'bar', 123, 1234] | 
					
						
							|  |  |  | >>> | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | Assignment to slices is also possible, and this may even change the size | 
					
						
							|  |  |  | of the list: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> # Replace some items: | 
					
						
							|  |  |  | >>> a[0:2] = [1, 12] | 
					
						
							|  |  |  | >>> a | 
					
						
							|  |  |  | [1, 12, 123, 1234] | 
					
						
							|  |  |  | >>> # Remove some: | 
					
						
							|  |  |  | >>> a[0:2] = [] | 
					
						
							|  |  |  | >>> a | 
					
						
							|  |  |  | [123, 1234] | 
					
						
							|  |  |  | >>> # Insert some: | 
					
						
							|  |  |  | >>> a[1:1] = ['bletch', 'xyzzy'] | 
					
						
							|  |  |  | >>> a | 
					
						
							|  |  |  | [123, 'bletch', 'xyzzy', 1234] | 
					
						
							|  |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | The built-in function {\tt len()} also applies to lists: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> len(a) | 
					
						
							|  |  |  | 4 | 
					
						
							|  |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | It is possible to nest lists (create lists containing other lists), | 
					
						
							|  |  |  | for example: | 
					
						
							|  |  |  | \bcode\begin{verbatim} | 
					
						
							|  |  |  | >>> p = [1, [2, 3], 4] | 
					
						
							|  |  |  | >>> len(p) | 
					
						
							|  |  |  | 3 | 
					
						
							|  |  |  | >>> p[1] | 
					
						
							|  |  |  | [2, 3] | 
					
						
							|  |  |  | >>> p[1][0] | 
					
						
							|  |  |  | 2 | 
					
						
							|  |  |  | >>> p[1].append('xtra') | 
					
						
							|  |  |  | >>> p | 
					
						
							|  |  |  | [1, [2, 3, 'xtra'], 4] | 
					
						
							|  |  |  | >>> | 
					
						
							|  |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | \section{First Steps Towards Programming} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | Of course, we can use Python for more complicated tasks than adding | 
					
						
							|  |  |  | two and two together.  For instance, we can write an initial | 
					
						
							|  |  |  | subsequence of the {\em Fibonacci} series as follows: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> # Fibonacci series: | 
					
						
							|  |  |  | >>> # the sum of two elements defines the next | 
					
						
							|  |  |  | >>> a, b = 0, 1 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | >>> while b < 10: | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | ...       print b | 
					
						
							|  |  |  | ...       a, b = b, a+b | 
					
						
							|  |  |  | ...  | 
					
						
							|  |  |  | 1 | 
					
						
							|  |  |  | 1 | 
					
						
							|  |  |  | 2 | 
					
						
							|  |  |  | 3 | 
					
						
							|  |  |  | 5 | 
					
						
							|  |  |  | 8 | 
					
						
							|  |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | This example introduces several new features. | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | \begin{itemize} | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | \item | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | The first line contains a {\em multiple assignment}: the variables | 
					
						
							|  |  |  | {\tt a} and {\tt b} simultaneously get the new values 0 and 1.  On the | 
					
						
							|  |  |  | last line this is used again, demonstrating that the expressions on | 
					
						
							|  |  |  | the right-hand side are all evaluated first before any of the | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | assignments take place. | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | \item | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | The {\tt while} loop executes as long as the condition (here: {\tt b < | 
					
						
							|  |  |  | 100}) remains true.  In Python, as in C, any non-zero integer value is | 
					
						
							|  |  |  | true; zero is false.  The condition may also be a string or list value, | 
					
						
							|  |  |  | in fact any sequence; anything with a non-zero length is true, empty | 
					
						
							|  |  |  | sequences are false.  The test used in the example is a simple | 
					
						
							|  |  |  | comparison.  The standard comparison operators are written as {\tt <}, | 
					
						
							|  |  |  | {\tt >}, {\tt =}, {\tt <=}, {\tt >=} and {\tt <>}.%
 | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | \footnote{ | 
					
						
							|  |  |  | 	The ambiguity of using {\tt =} | 
					
						
							|  |  |  | 	for both assignment and equality is resolved by disallowing | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | 	unparenthesized conditions on the right hand side of assignments. | 
					
						
							|  |  |  | 	Parenthesized assignment is also disallowed; instead it is | 
					
						
							|  |  |  | 	interpreted as an equality test. | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | \item | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | The {\em body} of the loop is {\em indented}: indentation is Python's | 
					
						
							|  |  |  | way of grouping statements.  Python does not (yet!) provide an | 
					
						
							|  |  |  | intelligent input line editing facility, so you have to type a tab or | 
					
						
							|  |  |  | space(s) for each indented line.  In practice you will prepare more | 
					
						
							|  |  |  | complicated input for Python with a text editor; most text editors have | 
					
						
							|  |  |  | an auto-indent facility.  When a compound statement is entered | 
					
						
							|  |  |  | interactively, it must be followed by a blank line to indicate | 
					
						
							|  |  |  | completion (since the parser cannot guess when you have typed the last | 
					
						
							|  |  |  | line). | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | \item | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | The {\tt print} statement writes the value of the expression(s) it is | 
					
						
							|  |  |  | given.  It differs from just writing the expression you want to write | 
					
						
							|  |  |  | (as we did earlier in the calculator examples) in the way it handles | 
					
						
							|  |  |  | multiple expressions and strings.  Strings are written without quotes, | 
					
						
							|  |  |  | and a space is inserted between items, so you can format things nicely, | 
					
						
							|  |  |  | like this: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> i = 256*256 | 
					
						
							|  |  |  | >>> print 'The value of i is', i | 
					
						
							|  |  |  | The value of i is 65536 | 
					
						
							|  |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | A trailing comma avoids the newline after the output: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> a, b = 0, 1 | 
					
						
							|  |  |  | >>> while b < 1000: | 
					
						
							|  |  |  | ...     print b, | 
					
						
							|  |  |  | ...     a, b = b, a+b | 
					
						
							|  |  |  | ...  | 
					
						
							|  |  |  | 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 | 
					
						
							|  |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | Note that the interpreter inserts a newline before it prints the next | 
					
						
							|  |  |  | prompt if the last line was not completed. | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | \end{itemize} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | \chapter{More Control Flow Tools} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-06-04 20:22:18 +00:00
										 |  |  | Besides the {\tt while} statement just introduced, Python knows the | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | usual control flow statements known from other languages, with some | 
					
						
							|  |  |  | twists. | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | \section{If Statements} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Perhaps the most well-known statement type is the {\tt if} statement. | 
					
						
							|  |  |  | For example: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> if x < 0: | 
					
						
							|  |  |  | ...      x = 0 | 
					
						
							|  |  |  | ...      print 'Negative changed to zero' | 
					
						
							|  |  |  | ... elif x = 0: | 
					
						
							|  |  |  | ...      print 'Zero' | 
					
						
							|  |  |  | ... elif x = 1: | 
					
						
							|  |  |  | ...      print 'Single' | 
					
						
							|  |  |  | ... else: | 
					
						
							|  |  |  | ...      print 'More' | 
					
						
							|  |  |  | ...  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | There can be zero or more {\tt elif} parts, and the {\tt else} part is | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | optional.  The keyword `{\tt elif}' is short for `{\tt else if}', and is | 
					
						
							|  |  |  | useful to avoid excessive indentation.  An {\tt if...elif...elif...} | 
					
						
							|  |  |  | sequence is a substitute for the {\em switch} or {\em case} statements | 
					
						
							|  |  |  | found in other languages. | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | \section{For Statements} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-06-04 20:22:18 +00:00
										 |  |  | The {\tt for} statement in Python differs a bit from what you may be | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | used to in C or Pascal.  Rather than always iterating over an | 
					
						
							|  |  |  | arithmetic progression of numbers (as in Pascal), or leaving the user | 
					
						
							|  |  |  | completely free in the iteration test and step (as C), Python's {\tt | 
					
						
							|  |  |  | for} statement iterates over the items of any sequence (e.g., a list | 
					
						
							|  |  |  | or a string), in the order that they appear in the sequence.  For | 
					
						
							|  |  |  | example (no pun intended): | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> # Measure some strings: | 
					
						
							|  |  |  | >>> a = ['cat', 'window', 'defenestrate'] | 
					
						
							|  |  |  | >>> for x in a: | 
					
						
							|  |  |  | ...     print x, len(x) | 
					
						
							|  |  |  | ...  | 
					
						
							|  |  |  | cat 3 | 
					
						
							|  |  |  | window 6 | 
					
						
							|  |  |  | defenestrate 12 | 
					
						
							|  |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | It is not safe to modify the sequence being iterated over in the loop | 
					
						
							|  |  |  | (this can only happen for mutable sequence types, i.e., lists).  If | 
					
						
							|  |  |  | you need to modify the list you are iterating over, e.g., duplicate | 
					
						
							|  |  |  | selected items, you must iterate over a copy.  The slice notation | 
					
						
							|  |  |  | makes this particularly convenient: | 
					
						
							|  |  |  | \bcode\begin{verbatim} | 
					
						
							|  |  |  | >>> for x in a[:]: # make a slice copy of the entire list | 
					
						
							|  |  |  | ...    if len(x) > 6: a.insert(0, x) | 
					
						
							|  |  |  | ...  | 
					
						
							|  |  |  | >>> a | 
					
						
							|  |  |  | ['defenestrate', 'cat', 'window', 'defenestrate'] | 
					
						
							|  |  |  | >>>  | 
					
						
							|  |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | \section{The {\tt range()} Function} | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | If you do need to iterate over a sequence of numbers, the built-in | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | function {\tt range()} comes in handy.  It generates lists containing | 
					
						
							|  |  |  | arithmetic progressions, e.g.: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> range(10) | 
					
						
							|  |  |  | [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] | 
					
						
							|  |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | The given end point is never part of the generated list; {\tt range(10)} | 
					
						
							|  |  |  | generates a list of 10 values, exactly the legal indices for items of a | 
					
						
							|  |  |  | sequence of length 10.  It is possible to let the range start at another | 
					
						
							|  |  |  | number, or to specify a different increment (even negative): | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> range(5, 10) | 
					
						
							|  |  |  | [5, 6, 7, 8, 9] | 
					
						
							|  |  |  | >>> range(0, 10, 3) | 
					
						
							|  |  |  | [0, 3, 6, 9] | 
					
						
							|  |  |  | >>> range(-10, -100, -30) | 
					
						
							|  |  |  | [-10, -40, -70] | 
					
						
							|  |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | To iterate over the indices of a sequence, combine {\tt range()} and | 
					
						
							|  |  |  | {\tt len()} as follows: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | >>> a = ['Mary', 'had', 'a', 'little', 'lamb'] | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> for i in range(len(a)): | 
					
						
							|  |  |  | ...     print i, a[i] | 
					
						
							|  |  |  | ...  | 
					
						
							|  |  |  | 0 Mary | 
					
						
							|  |  |  | 1 had | 
					
						
							|  |  |  | 2 a | 
					
						
							|  |  |  | 3 little | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | 4 lamb | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | \section{Break and Continue Statements, and Else Clauses on Loops} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The {\tt break} statement, like in C, breaks out of the smallest | 
					
						
							|  |  |  | enclosing {\tt for} or {\tt while} loop. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The {\tt continue} statement, also borrowed from C, continues with the | 
					
						
							|  |  |  | next iteration of the loop. | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Loop statements may have an {\tt else} clause; it is executed when the | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | loop terminates through exhaustion of the list (with {\tt for}) or when | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | the condition becomes false (with {\tt while}), but not when the loop is | 
					
						
							|  |  |  | terminated by a {\tt break} statement.  This is exemplified by the | 
					
						
							|  |  |  | following loop, which searches for a list item of value 0: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | >>> for n in range(2, 10): | 
					
						
							|  |  |  | ...     for x in range(2, n): | 
					
						
							|  |  |  | ...         if n % x = 0:
 | 
					
						
							|  |  |  | ...            print n, 'equals', x, '*', n/x | 
					
						
							|  |  |  | ...            break | 
					
						
							|  |  |  | ...     else: | 
					
						
							|  |  |  | ...          print n, 'is a prime number' | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | ...  | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | 2 is a prime number | 
					
						
							|  |  |  | 3 is a prime number | 
					
						
							|  |  |  | 4 equals 2 * 2 | 
					
						
							|  |  |  | 5 is a prime number | 
					
						
							|  |  |  | 6 equals 2 * 3 | 
					
						
							|  |  |  | 7 is a prime number | 
					
						
							|  |  |  | 8 equals 2 * 4 | 
					
						
							|  |  |  | 9 equals 3 * 3 | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | \section{Pass Statements} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | The {\tt pass} statement does nothing. | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | It can be used when a statement is required syntactically but the | 
					
						
							|  |  |  | program requires no action. | 
					
						
							|  |  |  | For example: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> while 1: | 
					
						
							|  |  |  | ...       pass # Busy-wait for keyboard interrupt | 
					
						
							|  |  |  | ...  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | \section{Defining Functions} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | We can create a function that writes the Fibonacci series to an | 
					
						
							|  |  |  | arbitrary boundary: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> def fib(n):    # write Fibonacci series up to n | 
					
						
							|  |  |  | ...     a, b = 0, 1 | 
					
						
							|  |  |  | ...     while b <= n: | 
					
						
							|  |  |  | ...           print b, | 
					
						
							|  |  |  | ...           a, b = b, a+b | 
					
						
							|  |  |  | ...  | 
					
						
							|  |  |  | >>> # Now call the function we just defined: | 
					
						
							|  |  |  | >>> fib(2000) | 
					
						
							|  |  |  | 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 | 
					
						
							|  |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | The keyword {\tt def} introduces a function {\em definition}.  It must | 
					
						
							|  |  |  | be followed by the function name and the parenthesized list of formal | 
					
						
							|  |  |  | parameters.  The statements that form the body of the function starts at | 
					
						
							|  |  |  | the next line, indented by a tab stop. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The {\em execution} of a function introduces a new symbol table used | 
					
						
							|  |  |  | for the local variables of the function.  More precisely, all variable | 
					
						
							|  |  |  | assignments in a function store the value in the local symbol table; | 
					
						
							|  |  |  | whereas | 
					
						
							|  |  |  |  variable references first look in the local symbol table, then | 
					
						
							|  |  |  | in the global symbol table, and then in the table of built-in names. | 
					
						
							|  |  |  | Thus, | 
					
						
							|  |  |  | global variables cannot be directly assigned to from within a | 
					
						
							|  |  |  | function, although they may be referenced. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | The actual parameters (arguments) to a function call are introduced in | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | the local symbol table of the called function when it is called; thus, | 
					
						
							|  |  |  | arguments are passed using {\em call\ by\ value}.%
 | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | \footnote{ | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | 	 Actually, {\em call  by  object reference} would be a better | 
					
						
							|  |  |  | 	 description, since if a mutable object is passed, the caller | 
					
						
							|  |  |  | 	 will see any changes the callee makes to it (e.g., items | 
					
						
							|  |  |  | 	 inserted into a list). | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | } | 
					
						
							|  |  |  | When a function calls another function, a new local symbol table is | 
					
						
							|  |  |  | created for that call. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | A function definition introduces the function name in the | 
					
						
							|  |  |  | current | 
					
						
							|  |  |  | symbol table.  The value | 
					
						
							|  |  |  | of the function name | 
					
						
							|  |  |  | has a type that is recognized by the interpreter as a user-defined | 
					
						
							|  |  |  | function.  This value can be assigned to another name which can then | 
					
						
							|  |  |  | also be used as a function.  This serves as a general renaming | 
					
						
							|  |  |  | mechanism: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> fib | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | <function object at 10042ed0> | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> f = fib | 
					
						
							|  |  |  | >>> f(100) | 
					
						
							|  |  |  | 1 1 2 3 5 8 13 21 34 55 89 | 
					
						
							|  |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | You might object that {\tt fib} is not a function but a procedure.  In | 
					
						
							|  |  |  | Python, as in C, procedures are just functions that don't return a | 
					
						
							|  |  |  | value.  In fact, technically speaking, procedures do return a value, | 
					
						
							|  |  |  | albeit a rather boring one.  This value is called {\tt None} (it's a | 
					
						
							|  |  |  | built-in name).  Writing the value {\tt None} is normally suppressed by | 
					
						
							|  |  |  | the interpreter if it would be the only value written.  You can see it | 
					
						
							|  |  |  | if you really want to: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> print fib(0) | 
					
						
							|  |  |  | None | 
					
						
							|  |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | It is simple to write a function that returns a list of the numbers of | 
					
						
							|  |  |  | the Fibonacci series, instead of printing it: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> def fib2(n): # return Fibonacci series up to n | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | ...     result = [] | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | ...     a, b = 0, 1 | 
					
						
							|  |  |  | ...     while b <= n: | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | ...           result.append(b)    # see below | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | ...           a, b = b, a+b | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | ...     return result | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | ...  | 
					
						
							|  |  |  | >>> f100 = fib2(100)    # call it | 
					
						
							|  |  |  | >>> f100                # write the result | 
					
						
							|  |  |  | [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] | 
					
						
							|  |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-06-04 20:22:18 +00:00
										 |  |  | This example, as usual, demonstrates some new Python features: | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | \begin{itemize} | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | \item | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | The {\tt return} statement returns with a value from a function.  {\tt | 
					
						
							|  |  |  | return} without an expression argument is used to return from the middle | 
					
						
							|  |  |  | of a procedure (falling off the end also returns from a proceduce), in | 
					
						
							|  |  |  | which case the {\tt None} value is returned. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | \item | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | The statement {\tt result.append(b)} calls a {\em method} of the list | 
					
						
							|  |  |  | object {\tt result}.  A method is a function that `belongs' to an | 
					
						
							|  |  |  | object and is named {\tt obj.methodname}, where {\tt obj} is some | 
					
						
							|  |  |  | object (this may be an expression), and {\tt methodname} is the name | 
					
						
							|  |  |  | of a method that is defined by the object's type.  Different types | 
					
						
							|  |  |  | define different methods.  Methods of different types may have the | 
					
						
							|  |  |  | same name without causing ambiguity.  (It is possible to define your | 
					
						
							|  |  |  | own object types and methods, using {\em classes}.  This is an | 
					
						
							|  |  |  | advanced feature that is not discussed in this tutorial.) | 
					
						
							|  |  |  | The method {\tt append} shown in the example, is defined for | 
					
						
							|  |  |  | list objects; it adds a new element at the end of the list.  In this | 
					
						
							|  |  |  | example | 
					
						
							|  |  |  | it is equivalent to {\tt result = result + [b]}, but more efficient. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | \end{itemize} | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \chapter{Odds and Ends} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This chapter describes some things you've learned about already in | 
					
						
							|  |  |  | more detail, and adds some new things as well. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \section{More on Lists} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The list data type has some more methods.  Here are all of the methods | 
					
						
							|  |  |  | of lists objects: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-01-22 11:45:00 +00:00
										 |  |  | \begin{description} | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | \item[{\tt insert(i, x)}] | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | Insert an item at a given position.  The first argument is the index of | 
					
						
							|  |  |  | the element before which to insert, so {\tt a.insert(0, x)} inserts at | 
					
						
							|  |  |  | the front of the list, and {\tt a.insert(len(a), x)} is equivalent to | 
					
						
							|  |  |  | {\tt a.append(x)}. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \item[{\tt append(x)}] | 
					
						
							|  |  |  | Equivalent to {\tt a.insert(len(a), x)}. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \item[{\tt index(x)}] | 
					
						
							|  |  |  | Return the index in the list of the first item whose value is {\tt x}. | 
					
						
							|  |  |  | It is an error if there is no such item. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \item[{\tt remove(x)}] | 
					
						
							|  |  |  | Remove the first item from the list whose value is {\tt x}. | 
					
						
							|  |  |  | It is an error if there is no such item. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | \item[{\tt sort()}] | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | Sort the items of the list, in place. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \item[{\tt reverse()}] | 
					
						
							|  |  |  | Reverse the elements of the list, in place. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-01-22 11:45:00 +00:00
										 |  |  | \end{description} | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | An example that uses all list methods: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | >>> a = [66.6, 333, 333, 1, 1234.5] | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> a.insert(2, -1) | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | >>> a.append(333) | 
					
						
							|  |  |  | >>> a | 
					
						
							|  |  |  | [66.6, 333, -1, 333, 1, 1234.5, 333] | 
					
						
							|  |  |  | >>> a.index(333) | 
					
						
							|  |  |  | 1 | 
					
						
							|  |  |  | >>> a.remove(333) | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> a | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | [66.6, -1, 333, 1, 1234.5, 333] | 
					
						
							|  |  |  | >>> a.reverse() | 
					
						
							|  |  |  | >>> a | 
					
						
							|  |  |  | [333, 1234.5, 1, 333, -1, 66.6] | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> a.sort() | 
					
						
							|  |  |  | >>> a | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | [-1, 1, 66.6, 333, 333, 1234.5] | 
					
						
							|  |  |  | >>> | 
					
						
							|  |  |  | \end{verbatim}\ecode | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \section{The {\tt del} statement} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | There is a way to remove an item from a list given its index instead | 
					
						
							|  |  |  | of its value: the {\tt del} statement.  This can also be used to | 
					
						
							|  |  |  | remove slices from a list (which we did earlier by assignment of an | 
					
						
							|  |  |  | empty list to the slice).  For example: | 
					
						
							|  |  |  | \bcode\begin{verbatim} | 
					
						
							|  |  |  | >>> a | 
					
						
							|  |  |  | [-1, 1, 66.6, 333, 333, 1234.5] | 
					
						
							|  |  |  | >>> del a[0] | 
					
						
							|  |  |  | >>> a | 
					
						
							|  |  |  | [1, 66.6, 333, 333, 1234.5] | 
					
						
							|  |  |  | >>> del a[2:4] | 
					
						
							|  |  |  | >>> a | 
					
						
							|  |  |  | [1, 66.6, 1234.5] | 
					
						
							|  |  |  | >>> | 
					
						
							|  |  |  | \end{verbatim}\ecode | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | {\tt del} can also be used to delete entire variables: | 
					
						
							|  |  |  | \bcode\begin{verbatim} | 
					
						
							|  |  |  | >>> del a | 
					
						
							|  |  |  | >>> | 
					
						
							|  |  |  | \end{verbatim}\ecode | 
					
						
							|  |  |  | Referencing the name {\tt a} hereafter is an error (at least until | 
					
						
							|  |  |  | another value is assigned to it).  We'll find other uses for {\tt del} | 
					
						
							|  |  |  | later. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \section{Tuples and Sequences} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | We saw that lists and strings have many common properties, e.g., | 
					
						
							|  |  |  | subscripting and slicing operations.  They are two examples of {\em | 
					
						
							|  |  |  | sequence} data types.  As Python is an evolving language, other | 
					
						
							|  |  |  | sequence data types may be added.  There is also another standard | 
					
						
							|  |  |  | sequence data type: the {\em tuple}. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | A tuple consists of a number of values separated by commas, for | 
					
						
							|  |  |  | instance: | 
					
						
							|  |  |  | \bcode\begin{verbatim} | 
					
						
							|  |  |  | >>> t = 12345, 54321, 'hello!' | 
					
						
							|  |  |  | >>> t[0] | 
					
						
							|  |  |  | 12345 | 
					
						
							|  |  |  | >>> t | 
					
						
							|  |  |  | (12345, 54321, 'hello!') | 
					
						
							|  |  |  | >>> # Tuples may be nested: | 
					
						
							|  |  |  | >>> u = t, (1, 2, 3, 4, 5) | 
					
						
							|  |  |  | >>> u | 
					
						
							|  |  |  | ((12345, 54321, 'hello!'), (1, 2, 3, 4, 5)) | 
					
						
							|  |  |  | >>> | 
					
						
							|  |  |  | \end{verbatim}\ecode | 
					
						
							|  |  |  | As you see, on output tuples are alway enclosed in parentheses, so | 
					
						
							|  |  |  | that nested tuples are interpreted correctly; they may be input with | 
					
						
							|  |  |  | or without surrounding parentheses, although often parentheses are | 
					
						
							|  |  |  | necessary anyway (if the tuple is part of a larger expression). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Tuples have many uses, e.g., (x, y) coordinate pairs, employee records | 
					
						
							|  |  |  | from a database, etc.  Tuples, like strings, are immutable: it is not | 
					
						
							|  |  |  | possible to assign to the individual items of a tuple (you can | 
					
						
							|  |  |  | simulate much of the same effect with slicing and concatenation, | 
					
						
							|  |  |  | though). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | A special problem is the construction of tuples containing 0 or 1 | 
					
						
							|  |  |  | items: the syntax has some extra quirks to accomodate these.  Empty | 
					
						
							|  |  |  | tuples are constructed by an empty pair of parentheses; a tuple with | 
					
						
							|  |  |  | one item is constructed by following a value with a comma | 
					
						
							|  |  |  | (it is not sufficient to enclose a single value in parentheses). | 
					
						
							|  |  |  | Ugly, but effective.  For example: | 
					
						
							|  |  |  | \bcode\begin{verbatim} | 
					
						
							|  |  |  | >>> empty = () | 
					
						
							|  |  |  | >>> singleton = 'hello',    # <-- note trailing comma | 
					
						
							|  |  |  | >>> len(empty) | 
					
						
							|  |  |  | 0 | 
					
						
							|  |  |  | >>> len(singleton) | 
					
						
							|  |  |  | 1 | 
					
						
							|  |  |  | >>> singleton | 
					
						
							|  |  |  | ('hello',) | 
					
						
							|  |  |  | >>> | 
					
						
							|  |  |  | \end{verbatim}\ecode | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The statement {\tt t = 12345, 54321, 'hello!'} is an example of {\em | 
					
						
							|  |  |  | tuple packing}: the values {\tt 12345}, {\tt 54321} and {\tt 'hello!'} | 
					
						
							|  |  |  | are packed together in a tuple.  The reverse operation is also | 
					
						
							|  |  |  | possible, e.g.: | 
					
						
							|  |  |  | \bcode\begin{verbatim} | 
					
						
							|  |  |  | >>> x, y, z = t | 
					
						
							|  |  |  | >>> | 
					
						
							|  |  |  | \end{verbatim}\ecode | 
					
						
							|  |  |  | This is called, appropriately enough, {\em tuple unpacking}.  Tuple | 
					
						
							|  |  |  | unpacking requires that the list of variables on the left has the same | 
					
						
							|  |  |  | number of elements as the length of the tuple.  Note that multiple | 
					
						
							|  |  |  | assignment is really just a combination of tuple packing and tuple | 
					
						
							|  |  |  | unpacking! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Occasionally, the corresponding operation on lists is useful: {\em list | 
					
						
							|  |  |  | unpacking}.  This is supported by enclosing the list of variables in | 
					
						
							|  |  |  | square brackets: | 
					
						
							|  |  |  | \bcode\begin{verbatim} | 
					
						
							|  |  |  | >>> a = ['foo', 'bar', 100, 1234] | 
					
						
							|  |  |  | >>> [a1, a2, a3, a4] = a | 
					
						
							|  |  |  | >>> | 
					
						
							|  |  |  | \end{verbatim}\ecode | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \section{Dictionaries} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Another useful data type built into Python is the {\em dictionary}. | 
					
						
							|  |  |  | Dictionaries are sometimes found in other languages as ``associative | 
					
						
							|  |  |  | memories'' or ``associative arrays''.  Unlike sequences, which are | 
					
						
							|  |  |  | indexed by a range of numbers, dictionaries are indexed by {\em keys}, | 
					
						
							|  |  |  | which are strings.  It is best to think of a dictionary as an unordered set of | 
					
						
							|  |  |  | {\em key:value} pairs, with the requirement that the keys are unique | 
					
						
							|  |  |  | (within one dictionary). | 
					
						
							|  |  |  | A pair of braces creates an empty dictionary: \verb/{}/. | 
					
						
							|  |  |  | Placing a comma-separated list of key:value pairs within the | 
					
						
							|  |  |  | braces adds initial key:value pairs to the dictionary; this is also the | 
					
						
							|  |  |  | way dictionaries are written on output. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The main operations on a dictionary are storing a value with some key | 
					
						
							|  |  |  | and extracting the value given the key.  It is also possible to delete | 
					
						
							|  |  |  | a key:value pair | 
					
						
							|  |  |  | with {\tt del}. | 
					
						
							|  |  |  | If you store using a key that is already in use, the old value | 
					
						
							|  |  |  | associated with that key is forgotten.  It is an error to extract a | 
					
						
							|  |  |  | value using a non-existant key. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The {\tt keys()} method of a dictionary object returns a list of all the | 
					
						
							|  |  |  | keys used in the dictionary, in random order (if you want it sorted, | 
					
						
							|  |  |  | just apply the {\tt sort()} method to the list of keys).  To check | 
					
						
							|  |  |  | whether a single key is in the dictionary, use the \verb/has_key()/ | 
					
						
							|  |  |  | method of the dictionary. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Here is a small example using a dictionary: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \bcode\begin{verbatim} | 
					
						
							|  |  |  | >>> tel = {'jack': 4098, 'sape': 4139} | 
					
						
							|  |  |  | >>> tel['guido'] = 4127 | 
					
						
							|  |  |  | >>> tel | 
					
						
							|  |  |  | {'sape': 4139; 'guido': 4127; 'jack': 4098} | 
					
						
							|  |  |  | >>> tel['jack'] | 
					
						
							|  |  |  | 4098 | 
					
						
							|  |  |  | >>> del tel['sape'] | 
					
						
							|  |  |  | >>> tel['irv'] = 4127 | 
					
						
							|  |  |  | >>> tel | 
					
						
							|  |  |  | {'guido': 4127; 'irv': 4127; 'jack': 4098} | 
					
						
							|  |  |  | >>> tel.keys() | 
					
						
							|  |  |  | ['guido', 'irv', 'jack'] | 
					
						
							|  |  |  | >>> tel.has_key('guido') | 
					
						
							|  |  |  | 1 | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | \section{More on Conditions} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The conditions used in {\tt while} and {\tt if} statements above can | 
					
						
							|  |  |  | contain other operators besides comparisons. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The comparison operators {\tt in} and {\tt not in} check whether a value | 
					
						
							|  |  |  | occurs (does not occur) in a sequence.  The operators {\tt is} and {\tt | 
					
						
							|  |  |  | is not} compare whether two objects are really the same object; this | 
					
						
							|  |  |  | only matters for mutable objects like lists.  All comparison operators | 
					
						
							|  |  |  | have the same priority, which is lower than that of all numerical | 
					
						
							|  |  |  | operators. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Comparisons can be chained: e.g., {\tt a < b = c} tests whether {\tt a} | 
					
						
							|  |  |  | is less than {\tt b} and moreover {\tt b} equals {\tt c}. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Comparisons may be combined by the Boolean operators {\tt and} and {\tt | 
					
						
							|  |  |  | or}, and the outcome of a comparison (or of any other Boolean | 
					
						
							|  |  |  | expression) may be negated with {\tt not}.  These all have lower | 
					
						
							|  |  |  | priorities than comparison operators again; between them, {\tt not} has | 
					
						
							|  |  |  | the highest priority, and {\tt or} the lowest, so that | 
					
						
							|  |  |  | {\tt A and not B or C} is equivalent to {\tt (A and (not B)) or C}.  Of | 
					
						
							|  |  |  | course, parentheses can be used to express the desired composition. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The Boolean operators {\tt and} and {\tt or} are so-called {\em | 
					
						
							|  |  |  | shortcut} operators: their arguments are evaluated from left to right, | 
					
						
							|  |  |  | and evaluation stops as soon as the outcome is determined.  E.g., if | 
					
						
							|  |  |  | {\tt A} and {\tt C} are true but {\tt B} is false, {\tt A and B and C} | 
					
						
							|  |  |  | does not evaluate the expression C.  In general, the return value of a | 
					
						
							|  |  |  | shortcut operator, when used as a general value and not as a Boolean, is | 
					
						
							|  |  |  | the last evaluated argument. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | It is possible to assign the result of a comparison or other Boolean | 
					
						
							|  |  |  | expression to a variable, but you must enclose the entire Boolean | 
					
						
							|  |  |  | expression in parentheses.  This is necessary because otherwise an | 
					
						
							|  |  |  | assignment like \verb/a = b = c/ would be ambiguous: does it assign the | 
					
						
							|  |  |  | value of {\tt c} to {\tt a} and {\tt b}, or does it compare {\tt b} to | 
					
						
							|  |  |  | {\tt c} and assign the outcome (0 or 1) to {\tt a}?  As it is, the first | 
					
						
							|  |  |  | meaning is what you get, and to get the latter you have to write | 
					
						
							|  |  |  | \verb/a = (b = c)/.  (In Python, unlike C, assignment cannot occur | 
					
						
							|  |  |  | inside expressions.) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \section{Comparing Sequences and Other Types} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Sequence objects may be compared to other objects with the same | 
					
						
							|  |  |  | sequence type.  The comparison uses {\em lexicographical} ordering: | 
					
						
							|  |  |  | first the first two items are compared, and if they differ this | 
					
						
							|  |  |  | determines the outcome of the comparison; if they are equal, the next | 
					
						
							|  |  |  | two items are compared, and so on, until either sequence is exhausted. | 
					
						
							|  |  |  | If two items to be compared are themselves sequences of the same type, | 
					
						
							|  |  |  | the lexiographical comparison is carried out recursively.  If all | 
					
						
							|  |  |  | items of two sequences compare equal, the sequences are considered | 
					
						
							|  |  |  | equal.  If one sequence is an initial subsequence of the other, the | 
					
						
							|  |  |  | shorted sequence is the smaller one.  Lexicographical ordering for | 
					
						
							|  |  |  | strings uses the ASCII ordering for individual characters.  Some | 
					
						
							|  |  |  | examples of comparisons between sequences with the same types: | 
					
						
							|  |  |  | \bcode\begin{verbatim} | 
					
						
							|  |  |  | (1, 2, 3)              < (1, 2, 4) | 
					
						
							|  |  |  | [1, 2, 3]              < [1, 2, 4] | 
					
						
							|  |  |  | 'ABC' < 'C' < 'Pascal' < 'Python' | 
					
						
							|  |  |  | (1, 2, 3, 4)           < (1, 2, 4) | 
					
						
							|  |  |  | (1, 2)                 < (1, 2, -1) | 
					
						
							|  |  |  | (1, 2, 3)              = (1.0, 2.0, 3.0) | 
					
						
							|  |  |  | (1, 2, ('aa', 'ab'))   < (1, 2, ('abc', 'a'), 4) | 
					
						
							|  |  |  | \end{verbatim}\ecode | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Note that comparing objects of different types is legal.  The outcome | 
					
						
							|  |  |  | is deterministic but arbitrary: the types are ordered by their name. | 
					
						
							|  |  |  | Thus, a list is always smaller than a string, a string is always | 
					
						
							|  |  |  | smaller than a tuple, etc.  Mixed numeric types are compared according | 
					
						
							|  |  |  | to their numeric value, so 0 equals 0.0, etc.%
 | 
					
						
							|  |  |  | \footnote{ | 
					
						
							|  |  |  | 	The rules for comparing objects of different types should | 
					
						
							|  |  |  | 	not be relied upon; they may change in a future version of | 
					
						
							|  |  |  | 	the language. | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \chapter{Modules} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-06-04 20:22:18 +00:00
										 |  |  | If you quit from the Python interpreter and enter it again, the | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | definitions you have made (functions and variables) are lost. | 
					
						
							|  |  |  | Therefore, if you want to write a somewhat longer program, you are | 
					
						
							|  |  |  | better off using a text editor to prepare the input for the interpreter | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | and run it with that file as input instead.  This is known as creating a | 
					
						
							|  |  |  | {\em script}.  As your program gets longer, you may want to split it | 
					
						
							|  |  |  | into several files for easier maintenance.  You may also want to use a | 
					
						
							|  |  |  | handy function that you've written in several programs without copying | 
					
						
							|  |  |  | its definition into each program. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-06-04 20:22:18 +00:00
										 |  |  | To support this, Python has a way to put definitions in a file and use | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | them in a script or in an interactive instance of the interpreter. | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | Such a file is called a {\em module}; definitions from a module can be | 
					
						
							|  |  |  | {\em imported} into other modules or into the {\em main} module (the | 
					
						
							|  |  |  | collection of variables that you have access to in a script | 
					
						
							|  |  |  | executed at the top level | 
					
						
							|  |  |  | and in calculator mode). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | A module is a file containing Python definitions and statements.  The | 
					
						
							|  |  |  | file name is the module name with the suffix {\tt .py} appended.  For | 
					
						
							|  |  |  | instance, use your favorite text editor to create a file called {\tt | 
					
						
							|  |  |  | fibo.py} in the current directory with the following contents: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | # Fibonacci numbers module | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def fib(n):    # write Fibonacci series up to n | 
					
						
							|  |  |  |     a, b = 0, 1 | 
					
						
							|  |  |  |     while b <= n: | 
					
						
							|  |  |  |           print b, | 
					
						
							|  |  |  |           a, b = b, a+b | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def fib2(n): # return Fibonacci series up to n | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  |     result = [] | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  |     a, b = 0, 1 | 
					
						
							|  |  |  |     while b <= n: | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  |           result.append(b) | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  |           a, b = b, a+b | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  |     return result | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-06-04 20:22:18 +00:00
										 |  |  | Now enter the Python interpreter and import this module with the | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | following command: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> import fibo | 
					
						
							|  |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | This does not enter the names of the functions defined in | 
					
						
							|  |  |  | {\tt fibo} | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | directly in the current symbol table; it only enters the module name | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | {\tt fibo} | 
					
						
							|  |  |  | there. | 
					
						
							|  |  |  | Using the module name you can access the functions: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> fibo.fib(1000) | 
					
						
							|  |  |  | 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 | 
					
						
							|  |  |  | >>> fibo.fib2(100) | 
					
						
							|  |  |  | [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] | 
					
						
							|  |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | If you intend to use a function often you can assign it to a local name: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> fib = fibo.fib | 
					
						
							|  |  |  | >>> fib(500) | 
					
						
							|  |  |  | 1 1 2 3 5 8 13 21 34 55 89 144 233 377 | 
					
						
							|  |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | \section{More on Modules} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | A module can contain executable statements as well as function | 
					
						
							|  |  |  | definitions. | 
					
						
							|  |  |  | These statements are intended to initialize the module. | 
					
						
							|  |  |  | They are executed only the | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | {\em first} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | time the module is imported somewhere.%
 | 
					
						
							|  |  |  | \footnote{ | 
					
						
							|  |  |  | 	In fact function definitions are also `statements' that are | 
					
						
							|  |  |  | 	`executed'; the execution enters the function name in the | 
					
						
							|  |  |  | 	module's global symbol table. | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Each module has its own private symbol table, which is used as the | 
					
						
							|  |  |  | global symbol table by all functions defined in the module. | 
					
						
							|  |  |  | Thus, the author of a module can use global variables in the module | 
					
						
							|  |  |  | without worrying about accidental clashes with a user's global | 
					
						
							|  |  |  | variables. | 
					
						
							|  |  |  | On the other hand, if you know what you are doing you can touch a | 
					
						
							|  |  |  | module's global variables with the same notation used to refer to its | 
					
						
							|  |  |  | functions, | 
					
						
							|  |  |  | {\tt modname.itemname}. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Modules can import other modules. | 
					
						
							|  |  |  | It is customary but not required to place all | 
					
						
							|  |  |  | {\tt import} | 
					
						
							|  |  |  | statements at the beginning of a module (or script, for that matter). | 
					
						
							|  |  |  | The imported module names are placed in the importing module's global | 
					
						
							|  |  |  | symbol table. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | There is a variant of the | 
					
						
							|  |  |  | {\tt import} | 
					
						
							|  |  |  | statement that imports names from a module directly into the importing | 
					
						
							|  |  |  | module's symbol table. | 
					
						
							|  |  |  | For example: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> from fibo import fib, fib2 | 
					
						
							|  |  |  | >>> fib(500) | 
					
						
							|  |  |  | 1 1 2 3 5 8 13 21 34 55 89 144 233 377 | 
					
						
							|  |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | This does not introduce the module name from which the imports are taken | 
					
						
							|  |  |  | in the local symbol table (so in the example, {\tt fibo} is not | 
					
						
							|  |  |  | defined). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | There is even a variant to import all names that a module defines: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> from fibo import * | 
					
						
							|  |  |  | >>> fib(500) | 
					
						
							|  |  |  | 1 1 2 3 5 8 13 21 34 55 89 144 233 377 | 
					
						
							|  |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | This imports all names except those beginning with an underscore | 
					
						
							|  |  |  | ({\tt \_}). | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | \section{Standard Modules} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-06-04 20:22:18 +00:00
										 |  |  | Python comes with a library of standard modules, described in a separate | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | document (Python Library Reference).  Some modules are built into the | 
					
						
							|  |  |  | interpreter; these provide access to operations that are not part of the | 
					
						
							|  |  |  | core of the language but are nevertheless built in, either for | 
					
						
							|  |  |  | efficiency or to provide access to operating system primitives such as | 
					
						
							|  |  |  | system calls.  The set of such modules is a configuration option; e.g., | 
					
						
							|  |  |  | the {\tt amoeba} module is only provided on systems that somehow support | 
					
						
							|  |  |  | Amoeba primitives.  One particular module deserves some attention: {\tt | 
					
						
							|  |  |  | sys}, which is built into every Python interpreter.  The variables {\tt | 
					
						
							|  |  |  | sys.ps1} and {\tt sys.ps2} define the strings used as primary and | 
					
						
							|  |  |  | secondary prompts: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> import sys | 
					
						
							|  |  |  | >>> sys.ps1 | 
					
						
							|  |  |  | '>>> ' | 
					
						
							|  |  |  | >>> sys.ps2 | 
					
						
							|  |  |  | '... ' | 
					
						
							|  |  |  | >>> sys.ps1 = 'C> ' | 
					
						
							|  |  |  | C> print 'Yuck!' | 
					
						
							|  |  |  | Yuck! | 
					
						
							|  |  |  | C>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | These two variables are only defined if the interpreter is in | 
					
						
							|  |  |  | interactive mode. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The variable | 
					
						
							|  |  |  | {\tt sys.path} | 
					
						
							|  |  |  | is a list of strings that determine the interpreter's search path for | 
					
						
							|  |  |  | modules. | 
					
						
							|  |  |  | It is initialized to a default path taken from the environment variable | 
					
						
							|  |  |  | {\tt PYTHONPATH}, | 
					
						
							|  |  |  | or from a built-in default if | 
					
						
							|  |  |  | {\tt PYTHONPATH} | 
					
						
							|  |  |  | is not set. | 
					
						
							|  |  |  | You can modify it using standard list operations, e.g.: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> import sys | 
					
						
							|  |  |  | >>> sys.path.append('/ufs/guido/lib/python') | 
					
						
							|  |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | \section{The {\tt dir()} function} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | The built-in function {\tt dir} is used to find out which names a module | 
					
						
							|  |  |  | defines.  It returns a sorted list of strings: | 
					
						
							|  |  |  | \bcode\begin{verbatim} | 
					
						
							|  |  |  | >>> import fibo, sys | 
					
						
							|  |  |  | >>> dir(fibo) | 
					
						
							|  |  |  | ['fib', 'fib2'] | 
					
						
							|  |  |  | >>> dir(sys) | 
					
						
							|  |  |  | ['argv', 'exit', 'modules', 'path', 'ps1', 'ps2', 'stderr', 'stdin', 'stdout'] | 
					
						
							|  |  |  | >>> | 
					
						
							|  |  |  | \end{verbatim}\ecode | 
					
						
							|  |  |  | Without arguments, {\tt dir()} lists the names you have defined currently: | 
					
						
							|  |  |  | \bcode\begin{verbatim} | 
					
						
							|  |  |  | >>> a = [1, 2, 3, 4, 5] | 
					
						
							|  |  |  | >>> import fibo, sys | 
					
						
							|  |  |  | >>> fib = fibo.fib | 
					
						
							|  |  |  | >>> dir() | 
					
						
							|  |  |  | ['a', 'fib', 'fibo', 'sys'] | 
					
						
							|  |  |  | >>> | 
					
						
							|  |  |  | \end{verbatim}\ecode | 
					
						
							|  |  |  | Note that it lists all types of names: variables, modules, functions, etc. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | {\tt dir()} does not list the names of built-in functions and variables. | 
					
						
							|  |  |  | If you want a list of those, they are defined in the standard module | 
					
						
							|  |  |  | {\tt builtin}: | 
					
						
							|  |  |  | \bcode\begin{verbatim} | 
					
						
							|  |  |  | >>> import builtin | 
					
						
							|  |  |  | >>> dir(builtin) | 
					
						
							|  |  |  | ['EOFError', 'KeyboardInterrupt', 'MemoryError', 'NameError', 'None', 'Runti | 
					
						
							|  |  |  | meError', 'SystemError', 'TypeError', 'abs', 'chr', 'dir', 'divmod', 'eval', | 
					
						
							|  |  |  |  'exec', 'float', 'input', 'int', 'len', 'long', 'max', 'min', 'open', 'ord' | 
					
						
							|  |  |  | , 'pow', 'range', 'raw_input', 'reload', 'type'] | 
					
						
							|  |  |  | >>> | 
					
						
							|  |  |  | \end{verbatim}\ecode | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \chapter{Output Formatting} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | So far we've encountered two ways of writing values: {\em expression | 
					
						
							|  |  |  | statements} and the {\tt print} statement.  (A third way is using the | 
					
						
							|  |  |  | {\tt write} method of file objects; the standard output file can be | 
					
						
							|  |  |  | referenced as {\tt sys.stdout}.  See the Library Reference for more | 
					
						
							|  |  |  | information on this.) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Often you'll want more control over the formatting of your output than | 
					
						
							|  |  |  | simply printing space-separated values.  The key to nice formatting in | 
					
						
							|  |  |  | Python is to do all the string handling yourself; using string slicing | 
					
						
							|  |  |  | and concatenation operations you can create any lay-out you can imagine. | 
					
						
							|  |  |  | The standard module {\tt string} contains some useful operations for | 
					
						
							|  |  |  | padding strings to a given column width; these will be discussed shortly. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | One question remains, of course: how do you convert values to strings? | 
					
						
							|  |  |  | Luckily, Python has a way to convert any value to a string: just write | 
					
						
							|  |  |  | the value between reverse quotes (\verb/``/).  Some examples: | 
					
						
							|  |  |  | \bcode\begin{verbatim} | 
					
						
							|  |  |  | >>> x = 10 * 3.14 | 
					
						
							|  |  |  | >>> y = 200*200 | 
					
						
							|  |  |  | >>> s = 'The value of x is ' + `x` + ', and y is ' + `y` + '...' | 
					
						
							|  |  |  | >>> print s | 
					
						
							|  |  |  | The value of x is 31.4, and y is 40000... | 
					
						
							|  |  |  | >>> # Reverse quotes work on other types besides numbers: | 
					
						
							|  |  |  | >>> p = [x, y] | 
					
						
							|  |  |  | >>> ps = `p` | 
					
						
							|  |  |  | >>> ps | 
					
						
							|  |  |  | '[31.4, 40000]' | 
					
						
							|  |  |  | >>> # Converting a string adds string quotes and backslashes: | 
					
						
							|  |  |  | >>> hello = 'hello, world\n' | 
					
						
							|  |  |  | >>> hellos = `hello` | 
					
						
							|  |  |  | >>> print hellos | 
					
						
							|  |  |  | 'hello, world\012' | 
					
						
							|  |  |  | >>> # The argument of reverse quotes may be a tuple: | 
					
						
							|  |  |  | >>> `x, y, ('foo', 'bar')` | 
					
						
							|  |  |  | '(31.4, 40000, (\'foo\', \'bar\'))' | 
					
						
							|  |  |  | >>> | 
					
						
							|  |  |  | \end{verbatim}\ecode | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Here is how you write a table of squares and cubes: | 
					
						
							|  |  |  | \bcode\begin{verbatim} | 
					
						
							|  |  |  | >>> import string | 
					
						
							|  |  |  | >>> for x in range(1, 11): | 
					
						
							|  |  |  | ...     print string.rjust(`x`, 2), string.rjust(`x*x`, 3), | 
					
						
							|  |  |  | ...     # Note trailing comma on previous line | 
					
						
							|  |  |  | ...     print string.rjust(`x*x*x`, 4) | 
					
						
							|  |  |  | ... | 
					
						
							|  |  |  |  1   1    1 | 
					
						
							|  |  |  |  2   4    8 | 
					
						
							|  |  |  |  3   9   27 | 
					
						
							|  |  |  |  4  16   64 | 
					
						
							|  |  |  |  5  25  125 | 
					
						
							|  |  |  |  6  36  216 | 
					
						
							|  |  |  |  7  49  343 | 
					
						
							|  |  |  |  8  64  512 | 
					
						
							|  |  |  |  9  81  729 | 
					
						
							|  |  |  | 10 100 1000 | 
					
						
							|  |  |  | >>> | 
					
						
							|  |  |  | \end{verbatim}\ecode | 
					
						
							|  |  |  | (Note that one space between each column was added by the way {\tt print} | 
					
						
							|  |  |  | works: it always adds spaces between its arguments.) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This example demonstrates the function {\tt string.rjust()}, which | 
					
						
							|  |  |  | right-justifies a string in a field of a given width by padding it with | 
					
						
							|  |  |  | spaces on the left.  There are similar functions {\tt string.ljust()} | 
					
						
							|  |  |  | and {\tt string.center()}.  These functions do not write anything, they | 
					
						
							|  |  |  | just return a new string.  If the input string is too long, they don't | 
					
						
							|  |  |  | truncate it, but return it unchanged; this will mess up your column | 
					
						
							|  |  |  | lay-out but that's usually better than the alternative, which would be | 
					
						
							|  |  |  | lying about a value.  (If you really want truncation you can always add | 
					
						
							|  |  |  | a slice operation, as in {\tt string.ljust(x,~n)[0:n]}.) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | There is another function, {\tt string.zfill}, which pads a numeric | 
					
						
							|  |  |  | string on the left with zeros.  It understands about plus and minus | 
					
						
							|  |  |  | signs:%
 | 
					
						
							|  |  |  | \footnote{ | 
					
						
							|  |  |  | 	Better facilities for formatting floating point numbers are | 
					
						
							|  |  |  | 	lacking at this moment. | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | \bcode\begin{verbatim} | 
					
						
							|  |  |  | >>> string.zfill('12', 5) | 
					
						
							|  |  |  | '00012' | 
					
						
							|  |  |  | >>> string.zfill('-3.14', 7) | 
					
						
							|  |  |  | '-003.14' | 
					
						
							|  |  |  | >>> string.zfill('3.14159265359', 5) | 
					
						
							|  |  |  | '3.14159265359' | 
					
						
							|  |  |  | >>> | 
					
						
							|  |  |  | \end{verbatim}\ecode | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \chapter{Errors and Exceptions} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Until now error messages haven't been more than mentioned, but if you | 
					
						
							|  |  |  | have tried out the examples you have probably seen some.  There are | 
					
						
							|  |  |  | (at least) two distinguishable kinds of errors: {\em syntax\ errors} | 
					
						
							|  |  |  | and {\em exceptions}. | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | \section{Syntax Errors} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Syntax errors, also known as parsing errors, are perhaps the most common | 
					
						
							| 
									
										
										
										
											1991-06-04 20:22:18 +00:00
										 |  |  | kind of complaint you get while you are still learning Python: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> while 1 print 'Hello world' | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | Parsing error: file <stdin>, line 1: | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | while 1 print 'Hello world' | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  |              ^ | 
					
						
							|  |  |  | Unhandled exception: run-time error: syntax error | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | The parser repeats the offending line and displays a little `arrow' | 
					
						
							|  |  |  | pointing at the earliest point in the line where the error was detected. | 
					
						
							|  |  |  | The error is caused by (or at least detected at) the token | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | {\em preceding} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | the arrow: in the example, the error is detected at the keyword | 
					
						
							|  |  |  | {\tt print}, since a colon ({\tt :}) is missing before it. | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | File name and line number are printed so you know where to look in case | 
					
						
							|  |  |  | the input came from a script. | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | \section{Exceptions} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | Even if a statement or expression is syntactically correct, it may | 
					
						
							|  |  |  | cause an error when an attempt is made to execute it. | 
					
						
							|  |  |  | Errors detected during execution are called {\em exceptions} and are | 
					
						
							|  |  |  | not unconditionally fatal: you will soon learn how to handle them in | 
					
						
							|  |  |  | Python programs.  Most exceptions are not handled by programs, | 
					
						
							|  |  |  | however, and result in error messages as shown here: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\small\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> 10 * (1/0) | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | Unhandled exception: run-time error: integer division by zero | 
					
						
							|  |  |  | Stack backtrace (innermost last): | 
					
						
							|  |  |  |   File "<stdin>", line 1 | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> 4 + foo*3 | 
					
						
							|  |  |  | Unhandled exception: undefined name: foo | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | Stack backtrace (innermost last): | 
					
						
							|  |  |  |   File "<stdin>", line 1 | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> '2' + 2 | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | Unhandled exception: type error: illegal argument type for built-in operation | 
					
						
							|  |  |  | Stack backtrace (innermost last): | 
					
						
							|  |  |  |   File "<stdin>", line 1 | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | The first line of the error message indicates what happened. | 
					
						
							|  |  |  | Exceptions come in different types, and the type is printed as part of | 
					
						
							|  |  |  | the message: the types in the example are | 
					
						
							|  |  |  | {\tt run-time error}, | 
					
						
							|  |  |  | {\tt undefined name} | 
					
						
							|  |  |  | and | 
					
						
							|  |  |  | {\tt type error}. | 
					
						
							|  |  |  | The rest of the line is a detail whose interpretation depends on the | 
					
						
							|  |  |  | exception type. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | The rest of the error message shows the context where the | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | exception happened. | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | In general it contains a stack backtrace listing source lines; however, | 
					
						
							|  |  |  | it will not display lines read from standard input. | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Here is a summary of the most common exceptions: | 
					
						
							|  |  |  | \begin{itemize} | 
					
						
							|  |  |  | \item | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | {\em Run-time\ errors} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | are generally caused by wrong data used by the program; this can be the | 
					
						
							|  |  |  | programmer's fault or caused by bad input. | 
					
						
							|  |  |  | The detail states the cause of the error in more detail. | 
					
						
							|  |  |  | \item | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | {\em Undefined\ name} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | errors are more serious: these are usually caused by misspelled | 
					
						
							|  |  |  | identifiers.%
 | 
					
						
							|  |  |  | \footnote{ | 
					
						
							|  |  |  | 	The parser does not check whether names used in a program are at | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | 	all defined elsewhere in the program; such checks are | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 	postponed until run-time.  The same holds for type checking. | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | The detail is the offending identifier. | 
					
						
							|  |  |  | \item | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | {\em Type\ errors} are also pretty serious: this is another case of | 
					
						
							|  |  |  | using wrong data (or better, using data the wrong way), but here the | 
					
						
							|  |  |  | error can be gleaned from the object type(s) alone.  The detail shows | 
					
						
							|  |  |  | in what context the error was detected. | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | \end{itemize} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | \section{Handling Exceptions} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | It is possible to write programs that handle selected exceptions. | 
					
						
							|  |  |  | Look at the following example, which prints a table of inverses of | 
					
						
							|  |  |  | some floating point numbers: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | >>> numbers = [0.3333, 2.5, 0, 10] | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> for x in numbers: | 
					
						
							|  |  |  | ...     print x, | 
					
						
							|  |  |  | ...     try: | 
					
						
							|  |  |  | ...         print 1.0 / x | 
					
						
							|  |  |  | ...     except RuntimeError: | 
					
						
							|  |  |  | ...         print '*** has no inverse ***' | 
					
						
							|  |  |  | ...  | 
					
						
							|  |  |  | 0.3333 3.00030003 | 
					
						
							|  |  |  | 2.5 0.4 | 
					
						
							|  |  |  | 0 *** has no inverse *** | 
					
						
							|  |  |  | 10 0.1 | 
					
						
							|  |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | The {\tt try} statement works as follows. | 
					
						
							|  |  |  | \begin{itemize} | 
					
						
							|  |  |  | \item | 
					
						
							|  |  |  | First, the | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | {\em try\ clause} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | (the statement(s) between the {\tt try} and {\tt except} keywords) is | 
					
						
							|  |  |  | executed. | 
					
						
							|  |  |  | \item | 
					
						
							|  |  |  | If no exception occurs, the | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | {\em except\ clause} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | is skipped and execution of the {\tt try} statement is finished. | 
					
						
							|  |  |  | \item | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | If an exception occurs during execution of the try clause, | 
					
						
							|  |  |  | the rest of the clause is skipped.  Then if | 
					
						
							|  |  |  | its type matches the exception named after the {\tt except} keyword, | 
					
						
							|  |  |  | the rest of the try clause is skipped, the except clause is executed, | 
					
						
							|  |  |  | and then execution continues after the {\tt try} statement. | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | \item | 
					
						
							|  |  |  | If an exception occurs which does not match the exception named in the | 
					
						
							|  |  |  | except clause, it is passed on to outer try statements; if no handler is | 
					
						
							|  |  |  | found, it is an | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | {\em unhandled\ exception} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | and execution stops with a message as shown above. | 
					
						
							|  |  |  | \end{itemize} | 
					
						
							|  |  |  | A {\tt try} statement may have more than one except clause, to specify | 
					
						
							|  |  |  | handlers for different exceptions. | 
					
						
							|  |  |  | At most one handler will be executed. | 
					
						
							|  |  |  | Handlers only handle exceptions that occur in the corresponding try | 
					
						
							|  |  |  | clause, not in other handlers of the same {\tt try} statement. | 
					
						
							|  |  |  | An except clause may name multiple exceptions as a parenthesized list, | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | e.g.: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | ... except (RuntimeError, TypeError, NameError): | 
					
						
							|  |  |  | ...     pass | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | The last except clause may omit the exception name(s), to serve as a | 
					
						
							|  |  |  | wildcard. | 
					
						
							|  |  |  | Use this with extreme caution! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | When an exception occurs, it may have an associated value, also known as | 
					
						
							|  |  |  | the exceptions's | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | {\em argument}. | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | The presence and type of the argument depend on the exception type. | 
					
						
							|  |  |  | For exception types which have an argument, the except clause may | 
					
						
							|  |  |  | specify a variable after the exception name (or list) to receive the | 
					
						
							|  |  |  | argument's value, as follows: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> try: | 
					
						
							|  |  |  | ...     foo() | 
					
						
							|  |  |  | ... except NameError, x: | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | ...     print 'name', x, 'undefined' | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | ...  | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | name foo undefined | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | If an exception has an argument, it is printed as the third part | 
					
						
							|  |  |  | (`detail') of the message for unhandled exceptions. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Standard exception names are built-in identifiers (not reserved | 
					
						
							|  |  |  | keywords). | 
					
						
							|  |  |  | These are in fact string objects whose | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | {\em object\ identity} | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | (not their value!) identifies the exceptions. | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | The string is printed as the second part of the message for unhandled | 
					
						
							|  |  |  | exceptions. | 
					
						
							|  |  |  | Their names and values are: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | EOFError              'end-of-file read' | 
					
						
							|  |  |  | KeyboardInterrupt     'keyboard interrupt' | 
					
						
							|  |  |  | MemoryError           'out of memory'           * | 
					
						
							|  |  |  | NameError             'undefined name'          * | 
					
						
							|  |  |  | RuntimeError          'run-time error'          * | 
					
						
							|  |  |  | SystemError           'system error'            * | 
					
						
							|  |  |  | TypeError             'type error'              * | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | The meanings should be clear enough. | 
					
						
							|  |  |  | Those exceptions with a {\tt *} in the third column have an argument. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Exception handlers don't just handle exceptions if they occur | 
					
						
							|  |  |  | immediately in the try clause, but also if they occur inside functions | 
					
						
							|  |  |  | that are called (even indirectly) in the try clause. | 
					
						
							|  |  |  | For example: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> def this_fails(): | 
					
						
							|  |  |  | ...     x = 1/0 | 
					
						
							|  |  |  | ...  | 
					
						
							|  |  |  | >>> try: | 
					
						
							|  |  |  | ...     this_fails() | 
					
						
							|  |  |  | ... except RuntimeError, detail: | 
					
						
							|  |  |  | ...     print 'Handling run-time error:', detail | 
					
						
							|  |  |  | ...  | 
					
						
							| 
									
										
										
										
											1991-04-23 14:14:57 +00:00
										 |  |  | Handling run-time error: integer division by zero | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | \section{Raising Exceptions} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | The {\tt raise} statement allows the programmer to force a specified | 
					
						
							|  |  |  | exception to occur. | 
					
						
							|  |  |  | For example: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> raise NameError, 'Hi There!' | 
					
						
							|  |  |  | Unhandled exception: undefined name: Hi There! | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | Stack backtrace (innermost last): | 
					
						
							|  |  |  |   File "<stdin>", line 1 | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | The first argument to {\tt raise} names the exception to be raised. | 
					
						
							|  |  |  | The optional second argument specifies the exception's argument. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | \section{User-defined Exceptions} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Programs may name their own exceptions by assigning a string to a | 
					
						
							|  |  |  | variable. | 
					
						
							|  |  |  | For example: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> my_exc = 'nobody likes me!' | 
					
						
							|  |  |  | >>> try: | 
					
						
							|  |  |  | ...     raise my_exc, 2*2 | 
					
						
							|  |  |  | ... except my_exc, val: | 
					
						
							| 
									
										
										
										
											1991-04-23 14:14:57 +00:00
										 |  |  | ...     print 'My exception occurred, value:', val | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | ...  | 
					
						
							|  |  |  | My exception occured, value: 4 | 
					
						
							|  |  |  | >>> raise my_exc, 1 | 
					
						
							|  |  |  | Unhandled exception: nobody likes me!: 1 | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | Stack backtrace (innermost last): | 
					
						
							|  |  |  |   File "<stdin>", line 7 | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | Many standard modules use this to report errors that may occur in | 
					
						
							|  |  |  | functions they define. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | \section{Defining Clean-up Actions} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | The {\tt try} statement has another optional clause which is intended to | 
					
						
							|  |  |  | define clean-up actions that must be executed under all circumstances. | 
					
						
							|  |  |  | For example: | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \bcode\begin{verbatim} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>> try: | 
					
						
							|  |  |  | ...     raise KeyboardInterrupt | 
					
						
							|  |  |  | ... finally: | 
					
						
							|  |  |  | ...     print 'Goodbye, world!' | 
					
						
							|  |  |  | ...  | 
					
						
							|  |  |  | Goodbye, world! | 
					
						
							|  |  |  | Unhandled exception: keyboard interrupt | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | Stack backtrace (innermost last): | 
					
						
							|  |  |  |   File "<stdin>", line 2 | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | >>>  | 
					
						
							| 
									
										
										
										
											1991-01-25 13:27:18 +00:00
										 |  |  | \end{verbatim}\ecode | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | The | 
					
						
							| 
									
										
										
										
											1991-01-23 16:31:24 +00:00
										 |  |  | {\em finally\ clause} | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | must follow the except clauses(s), if any. | 
					
						
							| 
									
										
										
										
											1991-08-16 09:13:42 +00:00
										 |  |  | It is executed whether or not an exception occurred, | 
					
						
							|  |  |  | or whether or not an exception is handled. | 
					
						
							| 
									
										
										
										
											1991-01-11 16:35:08 +00:00
										 |  |  | If the exception is handled, the finally clause is executed after the | 
					
						
							|  |  |  | handler (and even if another exception occurred in the handler). | 
					
						
							|  |  |  | It is also executed when the {\tt try} statement is left via a | 
					
						
							|  |  |  | {\tt break} or {\tt return} statement. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \end{document} |