Hi all,

I'm trying to convert functions - pass a few functions to a converting
function, which change their behaviour and return the changed
functions:

>>> def cfuncs(*funcs):
        n = []
        for f in funcs:
                def ff(*args, **key):
                        print 'Start!', f.func_name
                        res = f(*args, **key)
                        print 'End', f.func_name
                        return res
                n.append(ff)
        return n

then I try it using two functions:

>>> def f1():
        print 'hello'


>>> def f2(x):
        return 2 * x

Eventually:
>>> newfuncs = cfuncs(f1, f2)

I would expect newfuncs to hold changed versions of f1 and f2, but
what is actually contained in newfuncs is twice the changed version of
f2.

That is:

>>> newfuncs[1](100)
Start! f2
End f2
200

which is what I expected,

but:

>>> newfuncs[0]()
Start! f2

Traceback (most recent call last):
  File "<pyshell#267>", line 1, in <module>
    newfuncs[0]()
  File "<pyshell#261>", line 6, in ff
    res = f(*args, **key)
TypeError: f2() takes exactly 1 argument (0 given)

which is not.

I'll appreciate your help in pointing out the mistake in defining
cfuncs and how to fix it.
Thank you very much!

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to