542 lines
22 KiB
Plaintext
542 lines
22 KiB
Plaintext
|
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__
|