Pass a list of variables to a procedure

Chris Rebert clp2 at rebertia.com
Sat Apr 7 18:24:54 EDT 2012


On Sat, Apr 7, 2012 at 2:15 PM, KRB <alagalah at gmail.com> wrote:
> Hi there,
>
> I would like to be able to pass a list of variables to a procedure, and have the output assigned to them.

You cannot pass a variable itself to a function; you can only pass a
variable's value. Which is to say that Python doesn't use
pass-by-reference.
Without using black magic, a Python function cannot rebind variables
in its caller's scope. Mutable values can be mutated however.
Details: http://effbot.org/zone/call-by-object.htm

> For instance:
>
> x=0
> y=0
> z=0
>
> vars =[x,y,z]
> parameters=[1,2,3]
>
> for i in range(1,len(vars)):
> *** somefunction that takes the parameter "1", does a computation and assigns the output to "x", and so on and so forth.
>
> Such that later in the program I can
> print x,y,z
>
> I hope that makes sense, otherwise I have to do:
> x=somefunction(1)
> y=somefunction(2)
> z=somefunction(3)
> etc etc

Just use sequence (un)packing:

def somefunction(*parameters):
    # one would normally use a list comprehension here;
    # for simplicity, I'm not
    results = []
    for parameter in parameters:
        result = do_some_calculation(parameter)
        results.append(result)
    return results

#…later...
x, y, z = somefunction(1, 2, 3)


Relevant docs:
http://docs.python.org/tutorial/datastructures.html#tuples-and-sequences
http://docs.python.org/tutorial/controlflow.html#tut-unpacking-arguments

Cheers,
Chris



More information about the Python-list mailing list