A Python Bestiary | |
Itemizing Python Objects and Nuances | |
$Revision$ $Date$ ken.manheimer@nist.gov | |
Notable lexical entities | |
======================== | |
Keywords | |
access and break class | |
continue def del elif | |
else except exec finally | |
for from global if | |
import in is lambda | |
not or pass print | |
raise return try while | |
String Literal Escapes | |
\newline Ignored (escape newline) | |
\\ Backslash (\) \e Escape (ESC) \v Vertical Tab (VT) | |
\' Single quote (') \f Formfeed (FF) \0XX char with | |
\" Double quote (") \n Linefeed (LF) octal value XX | |
\a Bell (BEL) \r Carriage Return (CR) \xXX char with | |
\b Backspace (BS) \t Horizontal Tab (TAB) hex value XX | |
Illegitimate Tokens (only valid in strings): @ $ ? | |
Operating environment (Unix) | |
Shell environment vars: | |
PYTHONPATH: dirs to be prepended to module search path; a la shell PATH | |
PYTHONSTARTUP: names path of file to be loaded on interactive startup | |
Internal (module sys) vars ('import sys' to refer to them): | |
argv - list of command and arguments passed to python script | |
builtin_module_names - list of names of modules compiled in to python | |
( exc_* values are set only during handling of a raised exception) | |
exc_type - type of exception being handled | |
exc_value - exception's parameter ('raise's 2nd arg) | |
exc_traceback - exception's traceback obj | |
exit(N) - exit from python with status N, by raising SystemExit | |
exitfunc - function hook, to be called on exit if set | |
last_type - type of last unhandled exception | |
last_value - value of last unhandled exception | |
last_traceback - traceback of last unhandled exception | |
modules - list of modules already loaded | |
path - list of strings specifying module-load search path | |
ps1='>>>' - string specifying primary prompt, iff interactive | |
ps2='...' - string specifying secondary prompt, iff interactive | |
settrace - system trace function, used by debuggers, etc | |
setprofile - system profile function | |
stdin - standard input file object | |
stdout - standard output file object | |
stderr - standard error file object | |
tracebacklimit=1000 - maximum number of traceback levels to print | |
Objects - behaviors, special attributes, operations, statements, etc | |
==================================================================== | |
General object aspects | |
Boolean values and operators | |
False values: None, numeric zeros, empty sequences and mappings | |
True values: all other values | |
not X: if X is false then 1, else 0 | |
( 'or', 'and' evaluate second arg only if necessary to determine outcome) | |
X or Y: if X is false then Y, else X | |
X and Y: if X is false then X, else Y | |
Special methods for any type (s: self) | |
id(obj) unique identifier for object (currently, its address) | |
__init__(s, args) object instantiation - see Classes, below | |
__del__(s) object demise | |
__repr__(s) repr() and `...` conversions | |
__str__(s) str() and 'print' statement | |
__cmp__(s) implements <, ==, >, <=, <>, !=, >=, is [not] | |
__hash__(s) hash() and dictionary operations | |
Special informative state attributes for some types: | |
X.__dict__ dict used to store object's writeable attributes | |
X.__methods__ list of X's methods; on many built-in types. | |
X.__members__ lists of X's data attributes | |
X.__class__ class to which X belongs | |
X.__bases__ tuple of X base classes | |
General Name Space behavior and binding | |
Name space search order: local, global, builtin | |
"global" name space = file = module | |
"local" name space = function or method | |
Code Block scopes (ns = name space, cb = containing block) | |
( global ns generally is containing module, unless overriden by args) | |
Code block type Local ns Notes | |
--------------- -------- ----- | |
Module same as global ns | |
Script same as global ns global ns is __main__ | |
Interactive cmd same as global ns global ns is __main__ | |
Class def new ns | |
Function body new ns | |
'exec' string local ns of cb (or args) | |
'eval' string local ns of caller (or args) | |
'execfile' file local ns of caller (or args) | |
'input' expr local ns of caller | |
Binding operations and exceptions: | |
~ SyntaxError: on attempt to bind to literals or other non-bindables | |
~ NameError: on attempt to evaluate unbound atom | |
( for object attribute functions, obj: object, nm: string, val: any value) | |
getattr(obj, nm) get value of obj.nm | |
hasattr(obj, nm) true if obj has nm attribute | |
setattr(obj, nm, val) set obj.nm to val | |
assignment statement: targ1, targ2, ,,, = obj1, obj2, ,,, | |
deletion statement: del obj1, obj2, ... | |
for loop target identifiers, 'except' clauses (see Statements, below) | |
formal params (see Callables, below) | |
import statement (see Modules objects, below) | |
class and func defs (see Callables, below) | |
Name space linkage | |
global statement: global var, ... # Interpret 'var's as globals | |
X access statement: access ... # control inst and class vars access | |
@ Built-in Exceptions | |
AttributeError On attribute reference or assignment failure | |
EOFError Immediate end-of-file hit by input() or raw_input() | |
IOError I/O-related I/O operation failure | |
ImportError On failure of `import' to find module or name | |
IndexError On out-of-range sequence subscript | |
KeyError On reference to a non-existent mapping (dict) key | |
KeyboardInterrupt On user entry of the interrupt key (often `Control-C') | |
MemoryError On recoverable memory exhaustion | |
NameError On failure to find a local or global (unqualified) name | |
OverflowError On excessively large arithmetic operation | |
RuntimeError Obsolete catch-all; define a suitable error instead | |
SyntaxError On parser encountering a syntax error | |
SystemError On non-fatal interpreter error - bug - report it | |
SystemExit On `sys.exit()' | |
TypeError On passing inappropriate type to built-in op or func | |
ValueError On arg error not covered by TypeError or more precise | |
ZeroDivisionError On division or modulo operation with 0 as 2nd arg | |
**** Numbers **** | |
@ Integers: 'C' long, >= 32 bits precision; OverflowError if bounds exceeded | |
@ Long Integers: unlimited precision - '2147483648L' | |
@ Floating point: machine double-precision floating point - '2147483648.0' | |
Numeric operations vs special methods (s = self, o = other) | |
s+o = __add__(s,o) s-o = __sub__(s,o) | |
s*o = __mul__(s,o) s/o = __div__(s,o) | |
s%o = __mod__(s,o) divmod(s,o) = __divmod__(s,o) | |
pow(s,o) = __pow__(s,o) | |
s&o = __and__(s,o) | |
s^o = __xor__(s,o) s|o = __xor__(s,o) | |
s<<o = __lshift__(s,o) s>>o = __rshift__(s,o) | |
nonzero(s) = __nonzero__(s) coerce(s,o) = __coerce__(s,o) | |
-s = __neg__(s) +s = __pos__(s) | |
abs(s) = __abs__(s) ~s = __invert__(s) (bitwise) | |
int(s) = __int__(s) long(s) = __long__(s) | |
float(s) = __float__(s) | |
oct(s) = __oct__(s) hex(s) = __hex__(s) | |
Numeric functions: | |
range(start=0,end,step=1) create arithmetic progression list | |
round(x, n=0) round floating point x to n decimal places | |
xrange(start=0,end,step=1) create virtual arithmetic progressions tuple | |
Numeric exceptions: | |
~ TypeError: raised on application of arithemetic opertion to non-number | |
~ OverflowError: numeric bounds exceeded | |
~ ZeroDivisionError: raised when zero second argument of div or modulo op | |
**** Collections - Sequences and Mappings **** | |
Collections general operations vs methods (s: self, i: index or key) | |
len(s) = __len__(s) length of object, >= 0. Length 0 == false | |
s[i] = __getitem__(s,i) Element at index/key i, origin 0 | |
Sequences | |
@ String (immutable sequence): 'string contents' | |
'this is a string' | |
"and so is this" | |
''' and this begins a 'multi-line' string with embedded quotes... | |
and this is the end of that string.''' | |
`expr` = __repr__(expr), converts arbitrary expr to string | |
chr(int) string of ascii letter at ordinate in (0 <= int < 256) | |
ord(string) ascii ordinate of string (string must be length 1) | |
string % arg format operator, a la C sprintf | |
arg for single directive can be any (suitable) type | |
arg for multiple directives must be tuple or dict | |
dict (mapping) arg uses parenthesized directives that are keys into it | |
supports %, c, s, i, d, u, o, x, X, e, E, f, g, G directives | |
* can be width and precision; directs use of corresponding (int) args | |
* can not be used with dict args | |
flag characters -, +, blank, #, and 0 understood. | |
%s conversion takes any python object, converts using `str()' | |
ANSI directives %p and %n not supported | |
%s conversions do *not* take \000 as end of string | |
@ Tuples (immutable sequence): (oneelem, another, etc) | |
parens may be left off all but empty tuples | |
singletons represented by affixing a comma to an expr | |
empty tuple represented using empty parens | |
@ Lists (mutable sequence): [oneelem, another, etc] | |
assignment - must be 1-1 map of items in target and object sequences | |
deletion - similar rules as for assignment | |
List special methods: see mutable sequence ops vs methods, below | |
Sequences general ops vs methods (s: self, i,j: indices, v: val) | |
All collections general methods, plus: | |
s[i:j] __getslice__(s,i,j), all s[k] s.t. i <= k < j | |
min(s) smallest item of s | |
max(s) largest item of s | |
v [not] in s 1 if v [not] equal to an item in s, else 0 | |
s + seq concatenation of s and seq | |
s * num num copies of s concatenated, also, `num * s' | |
Immutable sequence ops vs methods (s: self, i,j: indices, v: val) | |
All collections and sequences general methods, plus: | |
s[i:j] __getslice__(s,i,j), all s[k] s.t. i <= k < j | |
( For s[i:j], len(self) is intrinsically added to i, j < 0) | |
( Complex elems of immutable seqs may be mutable, see dictionaries, below) | |
Mutable sequence ops vs methods (s: self, i,j: indices, v: val) | |
All sequences' general methods, plus: | |
( for non-slice refs, i < 0 intrinsically has len(s) added) | |
( For slice refs, len(s) *is not* intrinsically added to i, j < 0) | |
( for assignment/deletion, index refs must point to existing items | |
s[i]=v = __setitem__(s,i,v) | |
del s[i] = __delitem__(s,i) | |
s[i:j] = __getslice__(s,i,j) | |
s[i:j]=seq = __setslice__(s,i,j,seq) | |
del s[i:j] = __delslice__(s,i,j) == s[i:j] = [] | |
s.append(seq) == `s[len(seq):len(seq)] = seq' (but faster) | |
s.count(v) number of i's for which `s[i] == v' | |
s.index(v) first i such that `s[i] == v', or IndexError if none | |
s.insert(i, v) == `s[i:i] = [v]' | |
s.remove(v) == `del s[s.index(v)]', or IndexError if v not in s | |
s.reverse() reverse the items of s in place | |
s.sort() permute s items so s[i] <= s[j], for i < j | |
Mappings | |
@ Dictionaries: {key1: val1, key2: val2, ...} | |
built-in types as keys must be unalterable: obj & all contents immutable | |
User-defined classes as keys must have __hash__() and __cmp__() methods | |
~ TypeError is raised if key not acceptable | |
~ KeyError is raised if reference made using non-existent key | |
key types may vary (contrary to ref man) | |
Dictionaries ops vs methods (s: self, k: key, v: val) | |
all collections general ops, plus: | |
hash(s) = __hash__(s) - hash value for dictionary references | |
s[k]=v = __setitem__(s,k,v) | |
del s[k] = __delitem__(s,k) | |
s.items() = a list copy of s's (key, item) pairs | |
s.keys() = a list copy of s's keys | |
s.values() = a list copy of s's values | |
s.has_keys(k) = 1 if s has key k, else 0 | |
( s.items, .keys, and .values yield random but mutually consistent order) | |
**** Callables **** | |
@ User defined functions: 'def name (param-list): suite' | |
suite is not evaluated at statement execution, but at function invocation | |
function parameters, comma separated on param-list: | |
func_code: special attr, code object representing compiled function body | |
func_globals: special attr, ref to global dict of funcs definition module | |
func(arg-list) invocation | |
@ User defined methods: like functions, with extra implicit arg | |
Same as functions, but passed class instance as additional first argument | |
im_self: special attr, method's class instance object | |
im_func: special attr, function object | |
mthd(args) invocation, same as mthd.im_func(mthd.im_self, args) | |
@ Classes: 'class name[ (inheritance)]: suite' | |
inheritance list is evaluated, if any, to identify base classes for name | |
suite is executed in new local name space, which goes to the class object | |
class name is bound in encompassing local name space | |
container for dictionary containing class's ns dictionary | |
__dict__: ro attr, class ns as dictionary object | |
__bases__: ro attr, class' base classes in tuple | |
__init__(self, args..): implements object instantiation | |
__del__(self): implements impending object deletion | |
@ Class instances | |
__dict__: ro attr, class' attribute dictionary | |
__class__: ro attr, instance's class object | |
Callables special method vs ops (f: function) | |
apply(f, args-tuple) call f with args-tuple as arg list | |
compile(str, flnm, kind) compile string into exectuable code object | |
eval(str, glbls=, lcls=) evaluate string as expression (cond_list) | |
filter(f, seq) => seq of seq elems for which f is true | |
map(f, lst, [lst2, ...]) => list of f applied to succesive lsts elems | |
reduce(f, lst, initlzr) => value of f applied to elems and cume result | |
@ **** Null object: `None' **** | |
@ **** Type objects, print as: <type 'int'> **** | |
( '<...>' form is only for printing - cannot be entered that way, | |
accessed via built-in func 'type()' | |
( equal only when identical (same id()), | |
so can't just use the string name, must use object with the same str val) | |
@ **** Modules **** | |
functions and methods in a module share module's ("global") namespace | |
function uses "global" statement to instantiate var in global context | |
Modules use "import" to incorp other module's names - see Name Spaces | |
Special attrs, methods, and operations | |
__dict__: attr, module's ns as dictionary; can modify vals but not sruct | |
__name__: ro attr, module's name as string | |
import Instantiate module or module components within another | |
reload(amod) Reread an imported module | |
@ **** Files **** | |
wrapper around a C stdio file pointer | |
sys.stdin, sys.stdout, sys.stderr are standard io-stream file objects | |
File operations: | |
open(nm, mode='r', bufsize=sysdef) return new file object | |
close() A closed file cannot be read or written anymore. | |
flush() Flush the internal buffer, like stdio's `fflush()'. | |
isatty() 1 if file connected to a tty(-like) device, else 0. | |
read(SIZE) Read up to SIZE bytes frm file, less on EOF or no data | |
readline() Read one entire line from the file. | |
readlines() `readline()' til EOF and return list of lines read. | |
seek(OFFSET,WHENCE) Set file's current position, like stdio's `fseek()' | |
tell() Return file's current position, like stdio's `ftell()'. | |
write(STR) Write a string to the file. There is no return value. | |
File functions: | |
input(prompt='') like raw input but accept '\' line continuations | |
print exp, exp2, ... Write values to stdout | |
raw_input(prompt='') prompt then read single line of input | |
**** Internal types **** | |
@ Code objects - represent exectuable code - function obj sans context | |
@ Frame objects - represent executable frames - may occur in traceback objs | |
@ Traceback objects - stack trace of an exception | |
Control statements | |
================== | |
* Calls and Evaluation * | |
( See also Callables, in Objects section above, for ops and methods.) | |
exec: exec expr [ in expr2 [, expr3]] # Dynamic execution of python code | |
return: return [expr] # Leave current func call with expr value | |
* Conditionals and Loops * | |
( See also Boolean values, above) | |
break: break # Terminate nearest enclosing loop | |
continue: continue # Continue next cycle of enclosing loop | |
if: if cond: suite [\n elif cond: suite \n ...] [\n else: suite] | |
for: for targs in conds: suite [ \n else: suite ] | |
while: while cond: suite [ \n else : suite ] | |
* Exceptions * | |
raise: raise expr [, expr2] # Raise exception expr, passing expr2 if any | |
try... # Handle exceptions: | |
try: suite [\n except [cond [, targ]]: suite \n ... \n] [else: suite] | |
try: suite \n finally: suite # Specify a 'cleanup' handler | |
( two 'try' forms cannot be mixed together) | |
System modules | |
============== | |
@ * Built-ins * | |
sys Interpreter state (see Operating Environment, above) | |
__builtin__ Access to all built-in python identifiers | |
__main__ Scope of the interpreters main program, script or stdin | |
array Obj efficiently representing arrays of basic values | |
math Math functions of C standard | |
time Time-related functions | |
regex Regular expression matching operations | |
marshal Read and write some python values in binary format | |
strop Miscellaneous string operations | |
struct Convert between python values and C structs | |
@ * Standard * | |
getopt Parse cmd line args in sys.argv. A la UNIX 'getopt'. | |
os Portable interface to OS dependent functionality | |
pdb text-oriented debugger | |
rand Pseudo-random generator, like C rand() | |
regsub Functions useful for working with regular expressions | |
string Useful string and characters functions and exceptions | |
wdb window-oriented debugger | |
whrandom Wichmann-Hill pseudo-random number generator | |
@ * Miscellaneous * | |
dis Python disassembler | |
glob Filename globbing (a la unix shell) | |
grep File string search | |
posixpath Common operations on POSIX pathnames | |
profile Python code profiler | |
repr `...` repr operator with presentation constraints | |
string All of builtin 'strop', plus | |
tb Traceback browser and printer | |
tempfile Produce a temporary-file name | |
util Miscellaneous functions that don't belong elsewhere | |
@ * Unix * | |
dbm Dict/file-like interface to Unix ndbm database library | |
grp Interface to Unix group database | |
posix Standardized UNIX OS functionality - see 'os', above | |
posixpath POSIX pathname functions - see 'os', above | |
pwd Access to the Unix password database | |
select Access to Unix select multiplex file synchronization | |
socket Access to BSD socket interface | |
thread Low-level primitives for working with process threads | |
@ * Multimedia * | |
audioop Useful operations on sound fragments | |
imageop Useful operations on images | |
jpeg Access to jpeg image compressor and decompressor | |
rgbimg Access SGI imglib image files | |
@ * Cryptographic Extensions * | |
md5 Interface to RSA's MD5 message digest algorithm | |
mpz Interface to int part of GNU multiple precision library | |
rotor Implementation of a rotor-based encryption algorithm | |
@ * Stdwin * Standard Window System | |
stdwin Standard Window System interface | |
stdwinevents Stdwin event, command, and selection constants | |
rect Rectangle manipulation operations | |
@ * SGI IRIX * (4 & 5) | |
al SGI audio facilities | |
AL al constants | |
fl Interface to FORMS library | |
FL fl constants | |
flp Functions for form designer | |
fm Access to font manager library | |
gl Access to graphics library | |
GL Constants for gl | |
DEVICE More constants for gl | |
imgfile Imglib image file interface | |
@ * Suns * | |
sunaudiodev Access to sun audio interface | |
@ * Contrib * | |
syslog | |
metalbase | |
Idioms and hints | |
================ | |
Invoke main if running as script: if __name__ == '__main__': main() | |
General object-type miscellany | |
What type is someobj; eg, a list: if type(someobj) == type([]): | |
Convert number to hex or octal string: hex(122) => '0x7a' | |
Convert string to number: eval('0x7a') => 122 | |
Sequence Slice conceptualization: | |
+---+---+---+---+---+ Indices point ~between~ chars: | |
| s | t | u | f | f | - first char's left edge = 0, | |
+---+---+---+---+---+ - nth char's right edge = n. | |
0 1 2 3 4 5 (Note that -0 == 0, so it does | |
-5 -4 -3 -2 -1 not count from right.) | |
Sequences miscellany: | |
Create merge of lists: map(None, lst1, lst2, ...) | |
It's faster to list.append(elem) than to list[len(list):] = [elem] | |
Copy structure of seq a to b: b = a[:] | |
Comma (tuple vs expression grouping) nuances: | |
to specify a tuple of one element: ('element',) | |
to specify a tuple containing 1 tuple: (('contained', 'tuple'),) | |
"TypeError: call of non-function" often means a list missing a comma | |
Namespace and object surveillance: | |
get dictful object keys/key-vals: dir(), vars() | |
Current context globals: eval(__name__ + '.__dict__') | |
Current context locals: vars() | |
Methods supported by X (some objs): X.__methods__ | |
X's data attributes (some objs): X.__members__ |