def pfunc(inputfields, operation): """Parameterized computation of a new field For example, append a field that is the sum of fields 1 and 3: >>> z = pfunc((1, 3), operator.add) >>> database = [(10, 25, 30, 40, 50, 60), (100, 250, 300, 10, 500, 600)] >>> map(z, database) [(10, 25, 30, 40, 50, 60, 65), (100, 250, 300, 10, 500, 600, 260)] """ def z(record): newfield = operation(*[record[f] for f in inputfields]) return record + (newfield,) return z def rfunc(inputfield, operation): """Parameterized reduce operation For example, find the maximum value of field 2: >>> r = rfunc(2, max) >>> database = [(10, 25, 30, 40, 50, 60), (100, 250, 300, 10, 500, 600)] >>> reduce(r, database, 0) 300 """ def z(cumval, record): x = record[inputfield] return operation(cumval, x) return z def filt_func(inputfields, operation): """Parameterized filter operation For example, get records where field1 < field3: >>> f = filt_func((1, 3), operator.lt) >>> database = [(10, 25, 30, 40, 50, 60), (100, 250, 300, 10, 500, 600)] >>> filter(f, database) [(10, 25, 30, 40, 50, 60)] """ def z(record): i, j = inputfields return operation(record[i], record[j]) return z def xfunc(fields): """Parameterized extract operation For example, extract fields 1, 3, and 4 >>> x = xfunc((1,3,4)) >>> database = [(10, 25, 30, 40, 50, 60), (100, 250, 300, 10, 500, 600)] >>> map(x, database) [(25, 40, 50), (250, 10, 500)] """ def z(record): return tuple([record[f] for f in fields]) return z # Test the examples if __name__ == '__main__': import doctest, operator doctest.testmod()