Marcelo
By: a guest | Feb 17th, 2010 | Syntax:
Python | Size: 1.16 KB | Hits: 123 | Expires: Never
#!/usr/local/bin/python
#### Some function manipulation tools
class NoResult:
pass
def apply(f, x):
if x is NoResult:
return NoResult
try:
if hasattr(f, '__call__'):
return f(x)
elif type(f) == type([]):
for f_i in f:
x = apply(f_i, x)
return x
elif type(f) == type((1,)):
assert(len(f) == len(x))
ret = tuple([apply(f[i], x[i]) for i in range(len(f))])
if NoResult in ret:
return NoResult
else:
return ret
else:
return NoResult
except AssertionError:
return NoResult
#### Some domain-specific functions
def stripped(x):
return x.strip()
def split(sep):
def f(x):
return x.split(sep)
return f
def capitalized(x):
return x.capitalize()
if __name__ == '__main__':
DATA = """A,1,marcelo
B,3,paul
"""
import StringIO
datafile = StringIO.StringIO(DATA)
dataparser = [ stripped, split(','), (str, int, capitalized) ]
for line in datafile:
print apply(dataparser, line)