ich schaue mir gerade "Text Processing in Python" von David Mertz an. Der definiert in seinem ersten Kapitel mehrere Hilfsfunktionen mittels Lambda (http://gnosis.cx/TPiP/chap1.txt).
Code: Alles auswählen
#------------------- combinatorial.py -------------------#
from operator import mul, add, truth
apply_each = lambda fns, args=[]: map(apply, fns, [args]*len(fns))
bools = lambda lst: map(truth, lst)
bool_each = lambda fns, args=[]: bools(apply_each(fns, args))
conjoin = lambda fns, args=[]: reduce(mul, bool_each(fns, args))
all = lambda fns: lambda arg, fns=fns: conjoin(fns, (arg,))
both = lambda f,g: all((f,g))
all3 = lambda f,g,h: all((f,g,h))
and_ = lambda f,g: lambda x, f=f, g=g: f(x) and g(x)
disjoin = lambda fns, args=[]: reduce(add, bool_each(fns, args))
some = lambda fns: lambda arg, fns=fns: disjoin(fns, (arg,))
either = lambda f,g: some((f,g))
anyof3 = lambda f,g,h: some((f,g,h))
compose = lambda f,g: lambda x, f=f, g=g: f(g(x))
compose3 = lambda f,g,h: lambda x, f=f, g=g, h=h: f(g(h(x)))
ident = lambda x: x
Code: Alles auswählen
import operator
def apply_each(functions, args=[]):
"""Ruft jede Funktion mit args auf."""
return [f(*args) for f in functions]
def bools(sequence):
"""Prueft sequence auf True/False"""
return map(operator.truth, sequence)
def bool_each(functions, args=[]):
"""Prueft jedes Ergebnis von function(args) auf True/False"""
return bools(apply_each(functions, args))
def conjoin(functions, args):
"""Prueft, ob alle Ergebnisse aus function(args) True sind"""
return reduce(operator.mul, bool_each(functions, args))
addiere = lambda x, y: x + y
multipliziere = lambda x, y: x * y
print apply_each([addiere, multipliziere], [3, 4])
print bools([False, True, True])
print bool_each([addiere, multipliziere], [3,4])
print conjoin([addiere, multipliziere], [3,0])