bukzor <[EMAIL PROTECTED]> wrote: > That does, in fact work. Thanks! I'm a little sad that there's no > builtin way to do it, owell. > > >>> def f(a, *args): > ... print a > ... for b in args: print b > ... > >>> import inspect > >>> a = [2,3] > >>> b = {'a':1} > >>> inspect.getargspec(f) > (['a'], 'args', None, None) > >>> map(b.get, inspect.getargspec(f)[0]) > [1] > >>> map(b.get, inspect.getargspec(f)[0]) + a > [1, 2, 3] > >>> f(*map(b.get, inspect.getargspec(f)[0]) + a) > 1 > 2 > 3
If I saw that in my code I'd be wanting to get rid of it as soon as possible! I'd re-write f() to have all named arguments then the problem becomes easy and the answer pythonic (simple dictionary manipulation)... So instead of f(a, *args) have f(a, list_of_args). The f(*args) syntax is tempting to use for a function which takes a variable number of arguments, but I usually find myself re-writing it to take a list because of exactly these sort of problems. In fact I'd be as bold to say that f(*args) is slightly un-pythonic and you should avoid as a user interface. It does have its uses when writing polymorphic code though. -- Nick Craig-Wood <[EMAIL PROTECTED]> -- http://www.craig-wood.com/nick -- http://mail.python.org/mailman/listinfo/python-list