John O'Hagan a écrit :
Hi Pythonistas,

I'm looking for the best way to pass an arbitrary number and type of variables created by one function to another.
>
They can't be global because they may have different values each time they are used in the second function.

So far I'm trying to do something like this:


def process_args( [list, of, command-line, arguments] ):

        do stuff
        return {dictionary : of, local : variables }

def main_function( **kwargs ):

        do stuff
        return result

kw1 = process_args( [some, list] )
kw2 = process_args( [a, different, list] )

for i in main_function( **kw1 ):

        kw2[ var1 ] = i
        kw2[ var2 ] = len( i )

        for j in main_function(**kw2):

                print j

This only seems to work if I specify a default value for every possible parameter of main_function and also for any others which may be passed to it, which is a bit tedious because there are very many of them but only a few are used in any given execution of the program.

If this is about commmand line arguments parsing and defaults, you may want to have a look at the optparse package in the stdlib.

Also, kwargs work fine with default arguments too, ie:


def func(arg1=1, arg2='yadda', arg3=None):
    print arg1, arg2, arg3

for kw in ({}, {'arg1':42}, {'arg2':'yop', 'arg3' : range(5)}):
    func(**kw)

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

Reply via email to